gpt4 book ai didi

docker - 在 Dockerfile 中恢复 SQL Server DB.bak

转载 作者:行者123 更新时间:2023-12-05 00:45:52 25 4
gpt4 key购买 nike

我正在运行一个 .NET Razor 应用程序、一个 gitea 实例和一个 SQL Server 数据库,每个容器都在相互通信的单独容器中。我想使用数据库架构和数据启动我的数据库镜像(通过恢复 .bak 文件)。

我可以使用当前的 Dockerfile 执行此操作,如果它启动并运行后,我将运行这些额外的命令:

  1. docker exec -it myContainer/opt/mssql-tools/bin/sqlsmd -S localhost -U sa -P myPassword

  2. /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P myPassword -Q "RESTORE DATABASE MY_DB_NAME FROM DISK='/var/opt/mssql/backup/MY_DB_NAME.bak ' WITH MOVE 'MY_DB_NAME_TEST' TO '/var/opt/mssql/data/MY_DB_NAME_TEST.mdf', MOVE 'MY_DB_NAME_TEST_log' TO '/var/opt/mssql/data/MY_DB_NAME_TEST_log.ldf'”

这完成了工作,但我想完全自动化该过程,以便它由我的 docker-compose.yml 和 Dockerfile 100% 配置,所以我只需要键入:docker-compose up -d.

我不认为我的 docker-compose.yml 文件的内容是相关的,但这是我的 Dockerfile(我正在尝试运行我当前需要在 docker-compose up< 之后运行的脚本)/):

FROM microsoft/mssql-server-linux

ENV SA_PASSWORD=myPassword
ENV ACCEPT_EULA=Y

COPY ./ACES_DB.bak /var/opt/mssql/backup/MY_DB_NAME.bak
RUN docker exec -it myContainer bin/sh /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P myPassword -Q "RESTORE DATABASE MY_DB_NAME FROM DISK='/var/opt/mssql/backup/MY_DB_NAME.bak' WITH MOVE 'MY_DB_NAME_TEST' TO '/var/opt/mssql/data/MY_DB_NAME_TEST.mdf', MOVE 'MY_DB_NAME_TEST_log' TO '/var/opt/mssql/data/MY_DB_NAME_TEST_log.ldf'"

如有任何帮助,我们将不胜感激。

最佳答案

我和一个 friend 一起解决了这个问题,最终找到了这个解决方案。 docker 文件如下所示:

FROM microsoft/mssql-server-linux
ENV MSSQL_SA_PASSWORD=myPassword
ENV ACCEPT_EULA=Y

COPY ./My_DB.bak /var/opt/mssql/backup/My_DB.bak
COPY restore.sql restore.sql
RUN (/opt/mssql/bin/sqlservr --accept-eula & ) | grep -q "Starting database restore" && /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'myPassword' -d master -i restore.sql

*请注意,我将 SQL 恢复语句移到了 .sql 文件中。

关于docker - 在 Dockerfile 中恢复 SQL Server DB.bak,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62667040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com