Docker容器在健康检查失败后无法重新启动

3
我有以下的docker-compose文件。
version: "3.7"
services:
  myservice:
    restart: always
    image: myimage
    hostname: myhost
    env_file:
      - ./env/common.env
    healthcheck:
      test: ["CMD-SHELL", "curl --silent --fail localhost:9091/status || exit 1"]
      interval: 5s
      timeout: 1s
      retries: 1
      start_period: 5s   
    ports:
      - 27018:27018
    volumes: 
      - type: bind
        source: ./scripts/myservice
        target: /scripts  
    entrypoint: ["/bin/sh", "-c", "apk add bash && chmod a+x /scripts/init.sh && /scripts/init.sh"]

运行 docker-compose run myservice 后,我的容器正确启动(不会崩溃)。然而,健康检查失败,并且当我执行 docker ps 命令时,可以看到容器是不健康的。
我希望容器在不健康的情况下自动重新启动,但是当进行 curl 调用时,容器记录中会抛出错误并继续运行。
如何确保容器在健康检查失败时重新启动?
1个回答

3
您可能想看一下 这个,它的功能如下:

监控和重新启动不健康的Docker容器。这个功能曾经被建议包含在HEALTHCHECK中,但是没有被采纳。这个容器是一个代替品,直到有原生支持 --exit-on-unhealthy 的支持为止。https://github.com/docker/docker/pull/22719

对于您的情况,您可以设置一个具有上述支持的监视器容器,这个容器可以监视所有不健康的容器并为您重新启动它们。
docker run -d \
    --name autoheal \
    --restart=always \
    -e AUTOHEAL_CONTAINER_LABEL=all \
    -v /var/run/docker.sock:/var/run/docker.sock \
    willfarrell/autoheal

1
好的,看起来只有在Swarm模式下基于健康检查才会重新启动。谢谢! - kosta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接