在容器内运行服务时,假设使用mongodb命令
docker run -d myimage
将立即退出,并返回容器ID。在我的CI脚本中,我在运行mongo容器之后立即运行客户端以测试mongodb连接。问题是:由于服务尚未启动,客户端无法连接。除了sleep 10在脚本中添加大字体外,我看不到任何等待容器启动并运行的选项。
sleep 10
Docker的命令wait在这种情况下不起作用,因为该容器不存在。是docker的限制吗?
wait
如在docker 1.12 的类似问题中所述
HEALTHCHECK支持已根据docker / docker#23218在上游合并- 可考虑在启动该订单中的下一个容器之前确定容器何时健康
HEALTHCHECK
自docker 1.12rc3(2016-07-14)起可用
docker- compose正在支持等待特定条件的功能。
docker- compose
它使用libcompose(因此我不必重建docker交互)并为此添加了一堆配置命令。在这里查看:https : //github.com/dansteen/control- compose
libcompose
您可以像这样在Dockerfile中使用它:
HEALTHCHECK --interval=5m --timeout=3s \ CMD curl -f http://localhost/ || exit 1
官方文档:https : //docs.docker.com/engine/reference/builder/#/healthcheck