我正在尝试为 mssql 构建 docker 映像以恢复现有数据库。构建尚未完成。不会的。我尝试了好几次,它总是在构建。第一次等了45分钟还没结束。我自己用ctrl+C停了下来
这是我的 dockerfile 内容:
FROM mcr.microsoft.com/mssql/server:2019-latest
ENV MSSQL_SA_PASSWORD=Password123
ENV ACCEPT_EULA=Y
COPY ./AdventureWorks2022.bak /var/opt/mssql/backup/AdventureWorks2022.bak
RUN (/opt/mssql/bin/sqlservr --accept-eula & ) | grep -q "Starting database restore" && /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $MSSQL_SA_PASSWORD -d master -i "RESTORE DATABASE AdventureWorks2022 FROM DISK='/var/opt/mssql/backup/AdventureWorks2022.bak'"
当然,我不是 docker 大师,所以我无法轻易找到问题所在。 我想知道如何修复它以及如何改进我的 Dockerfile。 谢谢
感谢@David-Maze 和@AlwaysLearning
这是我用来让它工作的最终 Dockerfile。
# Use the official SQL Server 2022 image from Microsoft
FROM mcr.microsoft.com/mssql/server:2022-latest
# Set environment variables
ENV SA_PASSWORD=Password123
ENV ACCEPT_EULA=Y
# Create directory for database backups
RUN mkdir -p /usr/src/dbbackup; exit 0
WORKDIR $BACKUP_DIR
# Copy the database backup file to the container
COPY AdventureWorks2022.bak /usr/src/dbbackup/
COPY restore.sql /usr/src/dbbackup/
# Restore database during container build
RUN ( /opt/mssql/bin/sqlservr --accept-eula & ) | grep -q "Service Broker manager has started" \
&& /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $SA_PASSWORD -d master -i /usr/src/dbbackup/restore.sql \
&& pkill sqlservr
# Expose SQL Server port
EXPOSE 1433
# Start SQL Server when the container starts
CMD ["/opt/mssql/bin/sqlservr"]
还有我的restore.sql
CREATE DATABASE AdventureWorks2022;
GO
RESTORE DATABASE [AdventureWorks2022] FROM DISK=N'/usr/src/dbbackup/AdventureWorks2022.bak' WITH FILE = 1, STATS = 5, REPLACE, MOVE N'AdventureWorks2022' TO N'/var/opt/mssql/data/AdventureWorks2022.mdf', MOVE N'AdventureWorks2022_log' TO N'/var/opt/mssql/data/AdventureWorks2022_log.ldf';
GO
我确信它可以改进。如果需要保持简单,这确实是一个好的开始