docker-compose restore database in sql-server-linux



我正在按照 https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-configure-docker?view=sql-server-2017 在macOS中成功配置和运行具有持久数据的独立sqlserver容器。现在我想创建一个包含 2 件事的 docker-compose 文件:

  1. 数据库(将 bak 文件从主机复制到容器中并还原(

如何实现 (2(?

我的码头工人撰写文件:

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:

许多不同的方法可以完成还原任务。如果备份位于已装载的卷上,则可以使用 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将备份复制到容器中,然后从那里还原。

如果目标是在每次容器启动时从装入的卷还原数据库,则可以使用 RESTORE 命令(可以封装在 shell 脚本中(生成自定义 SQL Server 映像。下面是一个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

最新更新