如何用 docker-compose 只重启其中一个容器?

docker compose restart --no-deps 服务名 只重启指定服务;配置变了要重建用 up -d 服务名;不想动依赖容器加 --no-deps。本文区分 restart 与 recreate 的差别。

最佳实践
如何用 docker-compose 只重启其中一个容器?封面

做法:docker compose restart --no-deps <服务名>——停启该服务的容器,避免重启传播到依赖服务。一个服务可能有多个副本。注意 restart 不会应用 yml 改动或替换镜像;改了配置用 docker compose up -d --no-deps <服务名>,代码打进镜像时还需构建新镜像。

两个命令的差别(关键)

# 只是重启(进程停启,容器不变,配置不更新)
docker compose restart --no-deps web

# 应用配置变更(必要时重建容器;镜像内代码另需 build)
docker compose up -d --no-deps web
restart up -d
应用 yml 新配置 ❌ ✅
应用新镜像/代码 不替换镜像;绑定挂载代码由应用重载决定 镜像内代码需先构建或配 --build
速度 快 稍慢(可能重建)

--no-deps 的作用:web 依赖 db 时,up web 默认会确保 db 也在跑;加 --no-deps 就只动 web 自己。

常用组合

# 改了代码:构建 + 只重建这一个服务
docker compose up -d --build --no-deps web

# 配置热重载能解决的别重启(如 nginx)
docker compose exec web nginx -s reload

观察重启结果

docker compose ps web          # 状态
docker compose logs -f web     # 日志跟随

重启完成后,检查原先失败的业务请求是否恢复。已经接入观测云日志的服务,可按服务名与重启时间查询新的错误记录,再与重启前比较;日志采集配置中应保留容器标识,避免新旧实例混在一起。

常见问题(FAQ)

Q:restart 后改动没生效?
A:restart 不重读 yml 也不换镜像——用 up -d(配置)或 up -d --build(代码)。

Q:depends_on 的服务会跟着重启吗?
A:显式 restart 在部分依赖配置下可能传播重启;不希望涉及依赖服务时,restart 和 up 都使用 --no-deps。

Q:能滚动式逐个重启副本吗?
A:Compose 没有自动滚动更新保证。docker compose restart web 会涉及该服务的多个容器;需只重启一个副本时,先用 docker compose ps web 确认容器 ID,再用 docker restart <容器ID>。逐个手工操作也不保证零停机;需要滚动编排时用 K8s/Swarm。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台