我正在尝试在 Server 2016 上运行一些 Docker 容器测试。我已经安装了容器功能和最新的 Docker 引擎和 CLI。我已经下载了几个 Docker 映像,我已经使用它们启动 Docker 容器并自定义这些容器,提交更改并使用它们创建自定义 Docker 映像。
到目前为止,一切都很好:
我使用以下命令从其中一个 Microsoft Docker 映像创建容器:
docker run -d --name miis -p 80:80 microsoft/iis ping -t localhost
容器(miis)运行良好,我可以连接到它:
docker exec -i miis cmd
当我停止容器并尝试重新启动它时,问题就开始了。我使用以下命令停止并启动容器:
docker stop miis
docker start miis
然后,当我尝试使用以下命令获取正在运行的容器列表时docker ps
,我的容器未列出。当我使用以下命令获取所有容器的列表时,docker ps -a
我的容器被列出,状态为“已退出”。
据我了解,问题在于容器正在启动,运行它应该运行的作业,然后立即退出。
我的问题是如何启动从 Microsoft 或自定义映像创建的新容器并保持它们运行?防止它们立即进入退出状态。
我以为ping -t localhost
会这样做,但这似乎只能工作一段时间,并且它阻止我访问容器 CMD 提示符。
答案1
Docker 容器将一直运行,直到预期运行或遇到严重错误。
我会检查以确保您的 Docker 映像中没有任何正在终止的命令(即发出退出代码)。
如果仍有问题,请检查 docker 日志以查看其退出的原因。通常,退出代码为零表示已完成并发出了干净的退出代码。否则,它应该会为您提供有关导致容器关闭的原因的更多信息(缺少依赖项或 IIS 崩溃)。
在 Windows 上,日志存储到事件查看器中,使用以下命令:
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-5)
以下是查看日志的参考:
https://docs.microsoft.com/en-us/virtualization/windowscontainers/troubleshooting#finding-logs