【发布时间】:2019-03-14 08:11:10
【问题描述】:
在 dockerfile 中无法在 docker for windows 上执行 CMD 命令。
我想使用 CMD 运行几个命令,但是连一个命令都无法运行。
我已经尝试了以下方法,但没有任何效果......
1.
CMD "sqlcmd -S database -i C:\db\db_scripts\upgradescript.sql -U sa -P mypassword"
2.
RUN ["powershell", "-NoProfile", "-Command", "c:\db\db_scripts\script.ps1"]
3.
CMD ["cmd", "sqlcmd", "-S", "database", "-i", "C:\db\db_scripts\upgradescript.sql", "-U", "sa", "-P", "mypassword"]
4.
ARG arg1=database
ARG arg2=C:\db\db_scripts\upgradescript.sql
ARG arg3=sa
ARG arg4=mypassword!
RUN ["cmd", "-NoProfile", "-Command", "sqlcmd -S $env:arg1 -i $env:arg2 -U $env:arg3 -P $env:arg4"]
5.
RUN powershell.exe c:\db\db_scripts\script.ps1
6。
ENTRYPOINT ["powershell", "-NoProfile", "-Command", "sqlcmd"]
CMD ["-S database -i C:\db\db_scripts\upgradescript.sql -U sa -P mypassword"]
支持文件:
A. Script.ps1(2、5使用)
cmd /c "sqlcmd -S database -i C:\db\db_scripts\upgradescript.sql -U sa -P mypassword"
B. Dockerfile
# escape=`
FROM microsoft/mssql-server-windows-developer
COPY db\* c:\db\
COPY db_scripts\* c:\db\db_scripts\
ENV attach_dbs="[{'dbName':'ABC','dbFiles':['C:\db\ABC.mdf','C:\db\ABC_Log.ldf']},{'dbName':'XYZ','dbFiles':['C:\db\XYZ.mdf','C:\db\XYZ_Log.ldf']}]"
CMD "sqlcmd -S database -i C:\db\db_scripts\upgradescript.sql -U sa -P mypassword"
请注意,由于转义字符,我不需要使用“\\”。
观察
容器启动并在几秒钟后消失。
如果我删除 CMD 部分,容器就可以正常工作。我可以进入容器并可以在cmd shell 中运行上述sqlcmd 命令。
我做错了什么,缺少什么,任何更好的方法等。有人可以提供一些指导吗?谢谢!
编辑:
根据 Josh 的回答,这个 ENTRYPOINT 命令对我有用的唯一方法是(分享以便其他人可以受益,甚至发布更好的方法)...
ENV arg1 database
ENV arg2 C:\db\db_scripts\upgradescript.sql
ENV arg3 sa
ENV arg4 mypassword
ENTRYPOINT ["powershell sleep(60); sqlcmd"]
CMD ["-S $env:arg1 -i $env:arg2 -U $env:arg3 -P $env:arg4"]
【问题讨论】:
标签: docker containers dockerfile docker-container docker-for-windows