You need to enable JavaScript to run this app. 如何在docker-compose中实现默认服务故障时自动启动备用服务
优惠活动
大模型
产品
解决方案
定价
更多

如何在docker-compose中实现默认服务故障时自动启动备用服务

Docker Compose 同文件内服务故障自动切换备用链路实现方案

注意:所有方案都依赖默认链路服务的准确健康检查配置,建议不要仅用进程存活作为判断依据,最好配置可真实验证通信链路可用性的探测逻辑,比如请求业务探测接口、发送链路心跳包等。

方案1:轻量级脚本实现(无额外依赖)

  • 第一步:在你的docker-compose.yml中为默认链路服务添加健康检查配置,示例如下:
services:
  default-link: # 你的默认链路服务名
    # 原有镜像、端口、环境变量等配置保留
    healthcheck:
      test: ["CMD", "curl", "-f", "http://127.0.0.1:你的服务端口/健康探测路径"]
      interval: 10s # 检查间隔
      timeout: 5s # 单次检查超时时间
      retries: 3 # 连续失败多少次判定为故障
      start_period: 30s # 服务启动后多久开始执行健康检查
  backup-link: # 你的备用链路服务名
    # 原有配置保留
    restart: "no" # 默认不随compose自动启动
  • 第二步:编写监控脚本,定期检查默认服务健康状态,故障时自动拉起备用服务,脚本示例:
#!/bin/bash
while true; do
  # 获取默认服务健康状态
  DEFAULT_STATUS=$(docker inspect --format='{{.State.Health.Status}}' default-link 2>/dev/null)
  if [ "$DEFAULT_STATUS" != "healthy" ]; then
    # 检查备用服务是否未运行,未运行则启动
    BACKUP_RUNNING=$(docker inspect --format='{{.State.Running}}' backup-link 2>/dev/null)
    if [ "$BACKUP_RUNNING" != "true" ]; then
      docker compose up -d backup-link
      # 可选:停止故障的默认服务释放资源
      # docker compose stop default-link
    fi
  fi
  sleep 10
done
  • 第三步:给脚本加执行权限,配置为systemd等后台常驻服务即可使用,适配所有Docker Compose版本。

方案2:autoheal容器实现(无需自定义脚本)

依赖轻量的autoheal容器实现自动监控,适合不想自己维护监控逻辑的场景:

  • 在你的docker-compose.yml中新增autoheal服务配置:
services:
  # 原有default-link、backup-link配置保留
  autoheal:
    image: willfarrell/autoheal
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - AUTOHEAL_INTERVAL=10 # 检查间隔10秒
      - AUTOHEAL_STOP_TIMEOUT=5
    # 配置故障触发钩子
    command: /bin/sh -c "autoheal & while true; do if [ \"\$(docker inspect --format='{{.State.Health.Status}}' default-link)\" != \"healthy\" ]; then docker compose up -d backup-link; kill %1; exit; fi; sleep 10; done"
  • 启动compose后autoheal会自动在后台运行,默认服务健康检查失败后会自动执行启动备用服务的逻辑。

方案3:生产级无感知切换(Traefik反向代理实现)

如果两条链路对外提供相同的服务能力,建议搭配Traefik反向代理实现流量自动切换,无需启停服务,用户无感知:

  • 为两个链路服务配置相同的Traefik路由规则,给默认链路设置更高的权重
  • Traefik会自动执行后端健康检查,默认链路不健康时自动把所有流量切到备用链路,适合对业务连续性要求高的生产场景。

内容的提问来源于stack exchange,提问作者Adam Krawczyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 18:27:03