如何用 docker-compose 只重启其中一个容器?
docker compose restart 服务名 只重启指定服务;配置变了要重建用 up -d 服务名;不想动依赖容器加 --no-deps。本文区分 restart 与 recreate 的差别。
做法: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。