【发布时间】:2017-10-23 11:16:17
【问题描述】:
我正在尝试使用 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
000_create_db.sql 的内容在我看来并不重要。
真正的问题是,当我尝试使用命令 docker build -t demo . 构建此 Dockerfile 时,我总是会收到以下错误:
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..
但是当我删除最后一个命令(运行初始脚本)时,构建并运行映像,然后像这样调用相同的命令:
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
然后一切顺利。为什么我不能从Dockefile 运行脚本?
【问题讨论】:
标签: sql-server docker dockerfile sqlcmd