容器不健康时,自动重启(基础方案)

要实现容器不健康时自动重启,核心是结合 Docker 的「健康检查」+「重启策略」,或通过外部工具(如 Docker Compose、Systemd、Watchtower)增强管控。以下是多种落地方案,从简单到进阶逐步讲解:

一、基础方案:Docker 原生重启策略(推荐)

Docker 本身支持基于容器状态的重启策略,结合健康检查,可实现「不健康时自动重启」。

1. 核心逻辑
  • 先为容器配置健康检查(检测应用是否真的可用);
  • 再为容器设置重启策略 --restart=on-failure[:max-retries](容器退出 / 不健康时重启)。
2. 实操命令(运行容器时配置)
# 示例:Nginx 容器,不健康时自动重启(最多重启5次)
docker run -d \
  --name nginx-health \
  # 1. 配置健康检查(检测应用可用性)
  --health-cmd "curl -f http://localhost:80 || exit 1" \
  --health-interval 10s \       # 每10秒检查一次
  --health-timeout 5s \         # 检查超时5秒
  --health-retries 3 \          # 连续3次失败标记为不健康
  --health-start-period 30s \   # 启动后延迟30秒开始检查(适配应用启动耗时)
  # 2. 配置重启策略:不健康/退出时重启(最多5次)
  --restart=on-failure:5 \      # on-failure:容器非0退出码时重启;:5 是最大重启次数(可选)
  nginx
关键参数解读
  • --restart=on-failure:当容器退出码非 0(包括健康检查失败导致的容器状态异常)时,Docker 自动重启容器;若加 :max-retries(如 on-failure:5),则最多重启 5 次,避免无限重启。
  • 健康检查失败后,容器状态会变为 unhealthy,Docker 会判定为「运行异常」,触发 on-failure 重启策略。
4. 验证效果
  1. 手动让容器变不健康:

    运行

    # 进入容器,停止Nginx进程
    docker exec -it nginx-health bash
    nginx -s stop
    
  2. 等待 10 秒(健康检查间隔),查看容器状态:

    运行

    docker ps
    # 会看到容器先变为 unhealthy,随后自动重启(STATUS 列显示 Restarting → Up)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值