Docker 构建未完成

问题描述 投票:0回答:1

我正在尝试为 mssql 构建 docker 映像以恢复现有数据库。构建尚未完成。不会的。我尝试了好几次,它总是在构建。第一次等了45分钟还没结束。我自己用ctrl+C停了下来

enter image description here

这是我的 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。 谢谢

sql-server docker dockerfile
1个回答
0
投票

感谢@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

我确信它可以改进。如果需要保持简单,这确实是一个好的开始

© www.soinside.com 2019 - 2024. All rights reserved.