Docker容器无法在运行状况检查失败时重新启动

时间:2019-09-06 01:42:02

标签: docker docker-compose health-monitoring

我有以下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 个答案:

答案 0 :(得分:1)

您可能想看看this,其功能如下:

  

监视并重新启动不正常的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