You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在运行的Docker Compose栈中无停机重建单个服务?

无停机更新Docker Compose单个服务的可行方案

完全可行,你当前操作无效的核心原因是:docker compose start只会重启已存在的旧容器,不会用新构建的镜像替换它。以下是正确的操作流程和关键注意事项:

正确的无停机更新步骤

针对你的app-01服务,按以下顺序执行:

  1. 停止目标服务容器:
    docker compose stop app-01
    
    (此时haproxy的健康检查会自动将流量切到正常运行的app-02,前提是你配置了健康检查)
  2. 删除旧容器(可选但推荐):
    docker compose rm -f app-01
    
    彻底清除旧容器,避免后续误启动
  3. 构建新镜像:
    docker compose build app-01
    
  4. 启动新容器:
    docker compose up -d --no-deps app-01
    
    • -d:后台运行容器
    • --no-deps:仅启动目标服务,不触发其依赖服务的重启(避免影响mongo、redis等)

等app-01启动完成并通过haproxy健康检查后,再对app-02重复上述步骤,整个过程中始终有一个app服务对外提供能力,实现无停机更新。

关键注意事项

  • 必须配置负载均衡健康检查:确保haproxy能检测app服务的存活状态(比如检查/health接口),这样在服务停止/启动过程中,haproxy会自动剔除不健康实例,避免流量丢失或报错。
  • 避免使用docker compose start:该命令仅重启已存在的容器,不会应用新构建的镜像或配置变更,这是你之前遇到旧容器的根本原因。
  • 验证新容器状态:启动后可以通过docker compose logs app-01查看日志,确认服务正常启动;或通过haproxy的统计页面(如果开启)查看实例状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:43:22