【发布时间】:2014-08-24 00:31:17
【问题描述】:
我正在编写一个非常简单的 bash 脚本来快速检查我的容器是否仍然可以正确构建和启动,以及里面的应用程序是否响应请求。
有时docker run 会失败,例如因为我试图将容器绑定到的端口已经分配。但是当这种情况发生时docker run 的退出代码仍然是 0,所以我不能使用退出代码。如何以编程方式检查容器是否已正确启动?
我正在考虑的解决方案是:
- 分析错误输出
-
docker ps查看容器是否在运行
但是这两个看起来有点矫枉过正和丑陋。我是否错过了检查docker run 是否成功的更好方法?
【问题讨论】:
-
我不确定这里有什么问题。如果有问题的过程以通常的方式运行,那么您可以简单地检查退出代码。如果即使在失败的情况下它也会发出 0 退出代码,请尝试确定它是否是错误。如果程序在任何情况下都返回 0 的退出代码,那么您可能别无选择,只能解析输出。
-
正如@devnull 所说,如果你不能相信
docker run会在失败时返回一个非零返回码,那么你所能做的就是解析输出(这可能很复杂或脆弱)或使用另一个命令(即您的ps建议)来检查第一个命令的结果。您可能需要考虑向 docker 提交票证,看看他们是否也可以修复来自run的返回码。 -
确保您拥有最新版本。
-
是在您的容器中运行的自定义代码吗?如果是这样,您可以在 Dockerfile 中导出一个端口,当您的程序处于稳定运行状态时,在该端口上发送“OK”消息。您的客户端代码等待“OK”消息。
-
您能否提供一个示例来说明您是如何运行 docker 以及使用哪个版本的?快速测试显示 docker exit code 对我来说是 1
docker run -d -p 9010:9010 busybox true ; echo $?