首页 > 解决方案 > 不健康时如何启动服务?

问题描述

我的Dockerfile服务依赖于另一项服务,但我想在 service_healthy服务时否定条件。所以与以下相反:

service1:
    depends_on:
      service2:
        condition: service_healthy

所以基本上我想在 service2 不健康时启动 service1。

其次,根据 的文档depends_on,该condition选项已被删除,并且 Compose 文件格式的版本 3 不再支持该选项。

那么如何实现上述逻辑呢?

标签: docker-composedockerfile

解决方案


这是main容器等待其他主机退出的解决方法,方法是 ping 其他主机并在两者都离线时等待:

version: '3'
services:
  main:
    image: bash
    depends_on:
     - test01
     - test02
    command: bash -c "sleep 2 && until ! ping -qc1 test01 && ! ping -qc1 test02; do sleep 1; done &>/dev/null"
    networks:
      intra:
        ipv4_address: 172.10.0.254
  test01:
    image: bash
    hostname: test01
    command: bash -c "ip route && sleep 10"
    networks:
      intra:
        ipv4_address: 172.10.0.11
  test02:
    image: bash
    hostname: test02
    command: bash -c "ip route && sleep 20"
    networks:
      intra:
        ipv4_address: 172.10.0.12
networks:
  intra:
    driver: bridge
    ipam:
      config:
      - subnet: 172.10.0.0/24

另请参阅:Docker compose - 仅在其他服务完成时启动服务


推荐阅读