Tom*_*bry 16 sql-server sqlcmd docker dockerfile
我正在尝试使用MSSQL DB创建自己的Docker镜像以进行开发.它基于microsoft/mssql-server-linux
图像.在构建期间,我想将一些.sql
文件复制到容器中,然后运行这些脚本(创建数据库模式,表,插入一些数据等).我Dockerfile
看起来像这样:
# use MSSQL 2017 image on Ubuntu 16.04
FROM microsoft/mssql-server-linux:2017-latest
# create directory within SQL container for database files
RUN mkdir -p /opt/mssql-scripts
# copy the database files from host to container
COPY sql/000_create_db.sql /opt/mssql-scripts
# set environment variables
ENV MSSQL_SA_PASSWORD=P@ssw0rd
ENV ACCEPT_EULA=Y
# run initial scripts
RUN /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'P@ssw0rd' -i /opt/mssql-scripts/000_create_db.sql
Run Code Online (Sandbox Code Playgroud)
000_create_db.sql
在我看来,内容并不重要.
真正的问题是当我尝试Dockerfile
使用命令构建它时,docker build -t demo .
我总是会遇到这些错误:
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : TCP Provider: Error code 0x2749.
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..
Run Code Online (Sandbox Code Playgroud)
但是当我删除最后一个命令(运行初始脚本)时,构建并运行图像,并调用相同的命令:
docker build -t demo .
docker run -p 1433:1433 --name mssql -d demo
docker exec -it mssql "bash"
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'P@ssw0rd' -i /opt/mssql-scripts/000_create_db.sql
Run Code Online (Sandbox Code Playgroud)
一切都进展顺利.为什么我不能运行脚本Dockefile
?
rob*_*obd 16
我最终使用了VDR解决方案的稍微修改的版本,该版本通过检查日志而不是休眠10秒来等待sqlservr启动:
RUN ( /opt/mssql/bin/sqlservr --accept-eula & ) | grep -q "Service Broker manager has started" \
&& /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'P@ssw0rd' -i /opt/mssql-scripts/000_create_db.sql \
&& pkill sqlservr
Run Code Online (Sandbox Code Playgroud)
从MSSQL服务器Linux的dockerfile,看起来就像是MSSQL泊坞窗上开始运行,所以你必须在你的dockerfile修改最后的"运行"命令,在后台启动SQL服务器,运行SQL文件并停止SQL-服务器.
RUN /opt/mssql/bin/sqlservr --accept-eula & sleep 10 \
&& /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'P@ssw0rd' -i /opt/mssql-scripts/000_create_db.sql \
&& pkill sqlservr
Run Code Online (Sandbox Code Playgroud)
Buk*_*gey -3
当您构建图像时,主进程没有运行。在你的情况下,主要流程是SQL Server
.
仅当您使用命令启动容器时进程才会运行docker run ...
并且可以在这个阶段进行数据库初始化。microsoft/mssql-server-linux
Dockerfile
包含一些提示
将所有 SQL Server 运行时文件从构建删除复制到映像中。复制./安装/
只需将构建阶段初始化脚本复制到./install
目录,它将在启动阶段执行。
归档时间: |
|
查看次数: |
6620 次 |
最近记录: |