在Dockerfile中运行sqlcmd

时间:2019-06-04 13:43:25

标签: docker dockerfile

是否可以在dockerfile中运行sqlcmd?

首先我要创建一个图层

FROM microsoft/mssql-server-windows-developer:2017-latest

之后,我接受eula并设置sa密码,如下所示:

ENV ACCEPT_EULA=Y

ENV SA_PASSWORD=VerySecret!

这样做之后,我尝试执行一个简单的示例查询:

RUN sqlcmd -S "localhost" -U "SA" -P "VerySecret!" -Q "select name from master.dbo.sysdatabases"

不幸的是,docker build命令以错误消息“ Sqlcmd:'来自master.dbo.sysdatabases的名称':意外的参数而中断。输入'-?'寻求帮助。”

我做错什么了吗?

2 个答案:

答案 0 :(得分:1)

无法连接到Dockerfile中的数据库。

javacccmake命令那样思考Dockerfile。它产生一个二进制图像;生成该映像后,可以在多个不同的主机上运行它。您可以轻松地想象工作流,例如删除和重新创建数据库而无需重建映像,或者将映像推入和拉入到具有其他数据库的其他主机上,而这些主机未运行这些设置步骤。

这里的常用方法是将容器配置为运行数据库迁移,作为其启动序列的一部分,可能使用自定义入口点脚本。库存数据库映像还具有在首次创建容器时运行SQL脚本的机制,您可以使用该机制为应用程序创建一个空数据库。

答案 1 :(得分:1)

MS SQL容器可以在使用它们的dockerfile内对它们运行SQL语句。

我认为您的问题仅仅是从RUN命令中删除了双引号。

我不能完全确定它是否是基于this github issue的错误,但可以将其转义为\"来解决。

您还可以通过默认为受信任的连接来避免在docker文件中设置SA密码:

run sqlcmd -Q \"select name from master.dbo.sysdatabases\"

这样,可以在容器运行时设置变量,如下所示:

docker run -e ACCEPT_EULA=Y -e SA_PASSWORD=bobleponge -p 1433:1433 <imageid>