docker-compose восстановление базы данных в sql-server-linux - PullRequest
1 голос
/ 25 марта 2019

Я следую https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-docker?view=sql-server-2017, чтобы успешно настроить и запустить автономный контейнер sqlserver в макросах с постоянными данными. Теперь я хочу создать файл docker-compose, который содержит 2 вещи:

  1. Веб
  2. База данных (скопирует бак-файл с хоста в контейнер и восстановит)

Как мне достичь (2)?

Мой файл docker-compose:

version: "3"
services:
    web:
        build: 
            context: ./webapi
            dockerfile: Dockerfile
        ports:
            - "4010:80"
        environment: 
            - ASPNETCORE_ENVIRONMENT=Development
        depends_on:
            - db
    db:
        image: "mcr.microsoft.com/mssql/server:2017-latest"
        ports:
            - "4009:1433"
        volumes:
            - "sqlvolume:/var/opt/mssql"
        environment:
            SA_PASSWORD: "<password>"
            ACCEPT_EULA: "Y"
    redis:
        image: "redis:alpine"
volumes:
    sqlvolume:

1 Ответ

1 голос
/ 25 марта 2019

Существует множество способов выполнить задачу восстановления. Если ваша резервная копия находится на подключенном томе, вы можете восстановить, используя sqlcmd, например:

run docker exec -it db /opt/mssql-tools/bin/sqlcmd -Usa -P<password> -Q"RESTORE DATABASE YourDatabase FROM DISK='/var/opt/mssql/backup/your-backup.bak';"

Вы также можете скопировать резервную копию в контейнер, используя docker cp, и восстановить ее оттуда.

Если ваша цель - восстанавливать базу данных из подключенного тома при каждом запуске контейнера, вы можете создать собственный образ SQL Server с помощью команды RESTORE (которая может быть инкапсулирована в сценарий оболочки). Ниже приведен пример dockerfile:

FROM mcr.microsoft.com/mssql/server:2017-latest

CMD /opt/mssql-tools/bin/sqlcmd -U 'sa' -P $MSSQL_SA_PASSWORD -Q"RESTORE DATABASE YourDatabase FROM DISK='/var/opt/mssql/backup/your-backup.bak';" & /opt/mssql/bin/sqlservr
...