一尘不染

如何等待Docker容器启动并运行?

docker

在容器内运行服务时,假设使用mongodb命令

docker run -d myimage

将立即退出,并返回容器ID。在我的CI脚本中,我在运行mongo容器之后立即运行客户端以测试mongodb连接。问题是:由于服务尚未启动,客户端无法连接。除了sleep 10在脚本中添加大字体外,我看不到任何等待容器启动并运行的选项。

Docker的命令wait在这种情况下不起作用,因为该容器不存在。是docker的限制吗?


阅读 646

收藏
2020-06-17

共1个答案

一尘不染

如在docker 1.12
类似问题中所述

HEALTHCHECK支持已根据docker /
docker#23218在
上游合并-
可考虑在启动该订单中的下一个容器之前确定容器何时健康

docker
1.12rc3(2016-07-14)
起可用

docker- compose正在支持等待特定条件的功能。

它使用libcompose(因此我不必重建docker交互)并为此添加了一堆配置命令。在这里查看:https : //github.com/dansteen/control-
compose

您可以像这样在Dockerfile中使用它:

HEALTHCHECK --interval=5m --timeout=3s \
  CMD curl -f http://localhost/ || exit 1

官方文档:https :
//docs.docker.com/engine/reference/builder/#/healthcheck

2020-06-17