docker-compose восстановление базы данных в sql-server-linux

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

  1. Web
  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 ответ

Решение

Существует несколько различных способов выполнить задачу восстановления. Если ваша резервная копия находится на подключенном томе, вы можете восстановить с помощью 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
Другие вопросы по тегам