gpt4 book ai didi

docker - 如何等待 `docker start`完成?

转载 作者:行者123 更新时间:2023-12-02 18:14:30 26 4
gpt4 key购买 nike

当我运行docker start时,似乎在docker start命令返回时容器可能没有完全启动。是这样吗?

有没有办法在命令返回之前等待容器完全启动?谢谢。

最佳答案

确保容器已完全启动(即服务正在运行,端口打开等)的一种常见技术是等待直到记录了特定的字符串。请参阅此示例Waiting until Docker containers are initialized处理PostgreSql和Rails。

编辑:

可能还有另一种使用Docker容器的HEALTHCHECK的解决方案,其思想是使用运行状况检查命令配置该容器,该命令用于确定主服务是否完全
启动并正常运行。

指定的命令在容器内运行,并将运行状况设置为startinghealthyunhealthy取决于其退出代码(0-容器健康,1-容器不健康)。然后可以检索容器的状态
通过检查正在运行的实例(docker inspect)在主机上进行操作。

可以在Dockerfile内或运行容器时配置运行状况检查选项。这是PostgreSQL的简单示例

 docker run --name postgres --detach \
--health-cmd='pg_isready -U postgres' \
--health-interval='5s' \
--health-timeout='5s' \
--health-start-period='20s' \
postgres:latest && \
until docker inspect --format "{{json .State.Health.Status }}" postgres| \
grep -m 1 "healthy"; do sleep 1 ; done

在这种情况下,运行状况命令为 pg_isready。 Web服务通常将使用 curl,其他容器具有其特定命令
docker社区为几种官方镜像 here提供了这种配置

现在,当我们重新启动容器( docker start)时,它已经配置好了,我们只需要第二部分:
docker start postgres && \
until docker inspect --format "{{json .State.Health.Status }}" postgres|\
grep -m 1 "healthy"; do sleep 1 ; done

当容器标记为 healthy时,该命令将返回

希望能有所帮助。

关于docker - 如何等待 `docker start`完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54210258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com