【发布时间】:2018-03-21 17:53:18
【问题描述】:
我正在尝试在 Windows 10 上运行一个 docker 容器,该容器应该执行一个 Windows 可执行文件 (myprogram.exe)。您可以在下面找到我的 dockerfile:
FROM microsoft/windowsservercore
COPY mydir/myprogram.exe /mydir/
CMD ["/mydir/myprogram.exe","someparameter"]
所以我用以下方法构建图像:
docker image build --tag myimage .
并使用以下命令运行容器:
docker run myimage
不幸的是,如果我检查容器的状态:
docker ps -a我可以看到容器已经退出了
退出代码 3221225781
,这似乎指向丢失的 dll。
要调试问题,我运行以下命令:
docker run -it --name debug microsoft/windowsservercore cmd,停止容器并复制容器文件系统中的 windows 可执行文件:
docker cp myprogram.exe debug:c:/myprogram.exe
现在我使用docker start -i debug 再次启动容器并输入myprogram.exe myparameter。不幸的是,程序立即退出(通常运行大约 30 秒),没有任何输出,错误代码......
我对这种行为的唯一解释是,如果某些 cmd 程序缺少某些 dll,则相应的错误消息不包含在 STDERR 中,而是包含在消息对话框中。显然docker不支持这个功能???
所以最好的办法就是解决这个问题。使用依赖walker 来遍历所有需要的dll 是可能的,但需要一些时间,我正在寻找一些更优雅的解决方案。
【问题讨论】:
-
嘿,您找到解决方案了吗?根据您的程序,它可能是 .NET 框架之类的依赖项或 GUI 依赖项(Server Core 不支持)。如果应用程序提供了日志,您可以在运行时传递 -v 参数以将日志写入主机,例如
docker run -v c:\logs:c:\logs myimage -
你好。我在这里遇到同样的问题。您是否找到了至少可以解决问题的解决方案?
标签: windows docker dll containers