一尘不染

如何检测Docker是否以编程方式成功运行?

docker

我正在编写一个非常简单的bash脚本,以快速检查我的容器仍在构建并正确启动,并且其中的应用程序能够响应请求。

有时会docker run失败,例如因为我尝试将容器绑定到的端口已分配。但是当发生这种情况时docker run,退出代码仍为0,因此我无法使用退出代码。如何以编程方式检查容器是否已正确启动?

我正在考虑的解决方案是:

  • 解析输出中的错误
  • docker ps 查看容器是否正在运行

但是这些似乎都有些过分和丑陋。我是否缺少更好的方法来检查是否docker run成功?


阅读 256

收藏
2020-06-17

共1个答案

一尘不染

正如AbelMuiño在评论中所建议的那样,这可能已在较新的Docker版本中修复(我当前正在运行0.9.1)。

但是,如果您像我一样暂时停留在较旧的版本上,那么我确实找到了一种不错的解决方法来检查容器是否通过使用开始docker inspect

docker inspect返回一个JSON对象,其中包含有关容器的大量信息,尤其是容器当前是否正在运行。该-f标志使您可以轻松提取所需的位:

docker inspect -f {{.State.Running}} $CONTAINER_ID

要么

docker inspect -f "{{.State.Running}}" $CONTAINER_ID

将返回truefalse

请注意,您可能想要sleep 1(或更多)在启动容器和检查容器是否可用之间。如果您的设置有问题,则可能在实际退出之前的很短时间内显示为“正在运行”。

2020-06-17