【问题标题】:docker-compose restore database in sql-server-linuxdocker-compose 在 sql-server-linux 中恢复数据库
【发布时间】:2019-03-25 10:19:07
【问题描述】:

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

  1. 网络
  2. 数据库(将 bak 文件从主机复制到容器并恢复)

我如何实现 (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:

【问题讨论】:

    标签: sql-server docker sql-server-linux


    【解决方案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 将备份复制到容器中并从那里恢复。

    如果您的目标是在每次容器启动时从挂载的卷中恢复数据库,您可以使用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
    

    【讨论】:

    • 但是我怎样才能写入 dockerfile 或 docker-compose 文件呢?还是我把上面的命令写在那里?
    • @SteveLam,我添加了一个dockerfile 示例。
    • 感谢@Dan,它有效。你能告诉我你是怎么知道调用 CMD 和 "& /opt/mssql/bin/sqlservr" 的吗?
    • @SteveLam,问题链接中的示例显示了此方法。他们的关键是sqlserver 命令需要在最后一个命令才能保持容器运行,而前面的命令在后台运行。
    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多