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

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

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

做法:docker compose restart <服务名>——只停启该服务的容器,其他服务不动。注意 restart 不会应用 yml 改动;改了配置或代码要换 docker compose up -d <服务名>(自动检测变更并重建),加 --no-deps 连依赖服务也不碰。

两个命令的差别(关键)

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

# 应用变更(改了 yml/代码后用,必要时重建容器)
docker compose up -d --no-deps web
restart up -d
应用 yml 新配置
应用新镜像/代码 ❌(需先 build) ✅(配 --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 只动指定服务;up 默认会带依赖,--no-deps 可禁止。

Q:能滚动式逐个重启副本吗?
A:compose 单主机场景没有副本滚动概念,多副本用 --scale + 手动逐个 restart;要真滚动更新上 K8s/Swarm。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台