Docker Compose 命令速查表 - 多容器编排常用命令大全
面向需要把数据库、缓存、后端、前端等多个服务作为一个整体拉起、停止与升级的开发者。Compose 的核心价值不是命令本身,而是用一份 docker-compose.yml 锁定服务间的网络、依赖与配置,让整套环境可以重复起停。读完能独立用 up 拉起环境、用 logs 定位故障服务、用 down -v 彻底清理(并规避误删数据),以及用 --scale 做多实例扩容。
典型使用场景
用一份 YAML 编排多容器应用:一键启动/停止整套服务、管理网络与共享卷、查看聚合日志、按服务扩缩容,并排查依赖顺序、端口冲突与健康检查失败的编排问题。
启动与停止 5
docker compose up -ddocker compose up -d --builddocker compose stopdocker compose downdocker compose restart svc日志与状态 5
docker compose psdocker compose logs -f svcdocker compose logs --tail=100 svcdocker compose topdocker compose port svc 80配置与构建 5
docker compose configdocker compose builddocker compose pulldocker compose exec svc shdocker compose run --rm svc cmd网络与卷 5
docker compose up -d --scale svc=3docker network lsdocker compose down -vdocker volume lsdocker compose config --volumes常见问题 FAQ 5
Q: docker-compose up 和 docker-compose start 有什么区别?Q: 如何重新构建镜像?Q: 如何查看 Compose 项目的日志?Q: 如何只启动某个特定服务?Q: 如何删除所有容器和卷?参数矩阵
| 参数 | 作用 | 示例 |
|---|---|---|
up -d | 后台创建并启动所有服务 | docker compose up -d |
down | 停止并移除容器、网络(默认保留卷) | docker compose down |
ps | 查看各服务运行状态 | docker compose ps |
logs | 查看聚合日志 | docker compose logs -f web |
exec | 在运行中服务内执行命令 | docker compose exec web sh |
--build | 启动前重新构建镜像 | docker compose up -d --build |
scale / up --scale | 扩缩指定服务实例数 | docker compose up -d --scale web=3 |
restart | 重启服务 | docker compose restart web |
config | 校验并展开最终配置 | docker compose config |
pull | 仅拉取服务所用镜像 | docker compose pull |
易错点与避坑指南
现象up 后某个服务反复重启或一直 starting。
原因依赖服务未就绪(如 web 依赖 db 但无健康检查/depend_on 只等启动不等待就绪),或端口冲突。
处置为依赖服务加 healthcheck,用 depends_on 的 condition: service_healthy;用 docker compose logs 看具体报错。
现象容器间用服务名连不通。
原因服务不在同一自定义网络,或仍用 localhost 指向自身而非服务名。
处置Compose 默认建网络,用服务名(如 db)作主机名;应用连接串写服务名而非 127.0.0.1。
现象修改了 docker-compose.yml 但 up 没生效。
原因直接改文件未加 --build,或旧容器未重建。
处置改了构建相关配置后用 docker compose up -d --build;纯运行参数改动先 down 再 up。
现象down 后数据没了。
原因数据写在容器层而非命名卷,down 默认删除容器。
处置在 compose 中用 named volume 持久化数据;down 默认保留卷,必要时才加 -v 清理。
现象多个项目端口/网络名冲突。
原因Compose 默认项目名相同导致资源命名冲突。
处置用 -p 或 COMPOSE_PROJECT_NAME 区分项目;或在 compose 中显式命名网络/卷。
现象构建缓存导致代码改动没进镜像。
原因COPY 放在依赖安装之前,或 .dockerignore 漏配导致缓存命中。
处置把不常变的层放前面;用 --build 强制重建;检查 .dockerignore 是否排除了应包含的目录。
排障路径
1先校验配置再启动
docker compose config展开并验证 YAML,避免 up 时因配置错误整体失败。
2查看各服务状态与退出码
docker compose psState 列直接显示 Exit/Restarting,定位问题服务。
3跟踪某服务日志
docker compose logs -f web启动卡住时看该服务的实时输出。
4在运行中的服务内排查
docker compose exec web sh进容器验证网络连通、文件与进程状态。
提示
- compose 命令默认在当前目录找 docker-compose.yml,用 -f 指定其他文件,-p 指定项目名。
- down 默认不删卷,加 -v 才删;生产数据卷删除前先备份,命名卷删了数据找不回。
- --scale 扩容的服务端口不能写死宿主机端口,否则多实例端口冲突起不来。
由 巧匠 维护
公开更新于 2026年7月21日,内容持续校对官方文档。