Docker Compose 命令速查表 - 多容器编排常用命令大全

面向需要把数据库、缓存、后端、前端等多个服务作为一个整体拉起、停止与升级的开发者。Compose 的核心价值不是命令本身,而是用一份 docker-compose.yml 锁定服务间的网络、依赖与配置,让整套环境可以重复起停。读完能独立用 up 拉起环境、用 logs 定位故障服务、用 down -v 彻底清理(并规避误删数据),以及用 --scale 做多实例扩容。

容器与编排·共 25 条命令·最后更新 2026-07-21
dockercompose编排多容器

典型使用场景

用一份 YAML 编排多容器应用:一键启动/停止整套服务、管理网络与共享卷、查看聚合日志、按服务扩缩容,并排查依赖顺序、端口冲突与健康检查失败的编排问题。

启动与停止 5

docker compose up -d
后台启动所有服务,不加 -d 会前台输出日志
docker compose up -d --build
启动前强制重新构建镜像
docker compose stop
停止服务但保留容器,可快速 start 恢复
docker compose down
停止并删除容器和网络,加 -v 连卷一起删
docker compose restart svc
重启指定服务

日志与状态 5

docker compose ps
列出项目内服务状态
docker compose logs -f svc
跟踪指定服务日志,省略 svc 看全部
docker compose logs --tail=100 svc
看指定服务最后 100 行
docker compose top
查看各服务容器内运行的进程
docker compose port svc 80
查看服务端口映射到主机的实际端口

配置与构建 5

docker compose config
校验并展开 compose 配置,看变量替换结果
docker compose build
构建所有服务的镜像,加 --no-cache 不用缓存
docker compose pull
拉取所有服务镜像,更新前先拉
docker compose exec svc sh
进入运行中的服务容器
docker compose run --rm svc cmd
对服务执行一次性命令,--rm 跑完删容器

网络与卷 5

docker compose up -d --scale svc=3
水平扩容指定服务到 3 个实例
docker network ls
查看网络,compose 项目会创建自己的网络
docker compose down -v
删除项目并清理命名卷,数据会丢慎用
docker volume ls
查看数据卷,compose 卷名格式为 项目名_卷名
docker compose config --volumes
列出 compose 文件定义的所有卷

常见问题 FAQ 5

Q: docker-compose up 和 docker-compose start 有什么区别?
A: docker compose up 会创建并启动容器(加 -d 后台运行),docker compose start 只启动已存在的停止容器,不会重新创建。
Q: 如何重新构建镜像?
A: docker compose build 重新构建所有服务镜像,加 --no-cache 禁用缓存强制全量构建。docker compose up -d --build 在启动前自动构建。
Q: 如何查看 Compose 项目的日志?
A: docker compose logs -f 查看所有服务日志,docker compose logs -f <service> 只看指定服务,加 --tail=100 限制行数。
Q: 如何只启动某个特定服务?
A: docker compose up -d <service> 只启动指定服务及其依赖,不启动其他服务。
Q: 如何删除所有容器和卷?
A: docker compose down -v 删除所有容器和网络并清理命名卷,数据会永久丢失,生产环境慎用。

参数矩阵

参数作用示例
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. 1先校验配置再启动

    docker compose config

    展开并验证 YAML,避免 up 时因配置错误整体失败。

  2. 2查看各服务状态与退出码

    docker compose ps

    State 列直接显示 Exit/Restarting,定位问题服务。

  3. 3跟踪某服务日志

    docker compose logs -f web

    启动卡住时看该服务的实时输出。

  4. 4在运行中的服务内排查

    docker compose exec web sh

    进容器验证网络连通、文件与进程状态。

命令示例

后台启动整套服务并在启动前重建镜像

docker compose up -d --build

不加 -d 会占用终端输出所有服务的日志;加 --build 保证这次拿到的是刚构建出的镜像而不是旧缓存。

跟踪指定服务日志并只看最后 100 行

docker compose logs --tail=100 -f svc

省略 svc 就是看全部服务的聚合日志;--tail 限制回溯行数,避免一进终端就被上万行刷屏。

进入运行中的服务容器排查

docker compose exec svc sh

服务必须处于运行中才能 exec;一次性命令用 run --rm,跑完临时容器即被删除。

把某个服务水平扩容到 3 个实例

docker compose up -d --scale svc=3

扩容的服务不能把宿主机端口写死,否则多个实例抢同一个宿主端口会起不来。

常见坑与注意事项

  • docker compose down -v 会连命名卷一起删除,数据不可恢复,共享数据卷的生产环境执行前必须先备份。
  • 用 --scale 扩容的服务不要在 compose 里写死宿主机端口,多实例会因端口冲突启动失败。
  • 改了 compose 文件不要只 restart,restart 不重新解析配置也不重建容器,应先 config 校验再 up -d。
  • 同一台机器上跑多个 compose 项目时注意网络名和卷名前缀都是按项目名生成的,重名会导致互相覆盖,必要时用 -p 显式区分项目名。
  • build 默认走缓存,改了代码却发现镜像里还是旧内容时,加 --no-cache 做一次全量构建再验证。

提示

  • compose 命令默认在当前目录找 docker-compose.yml,用 -f 指定其他文件,-p 指定项目名。
  • down 默认不删卷,加 -v 才删;生产数据卷删除前先备份,命名卷删了数据找不回。
  • --scale 扩容的服务端口不能写死宿主机端口,否则多实例端口冲突起不来。

常见问题

docker compose stop 和 docker compose down 我该用哪个?

看你想不想保留容器。stop 只停止服务但保留容器,后续可以快速恢复;down 会停止并删除容器和网络,容器就没了,下次要重新创建。需要同时清掉数据卷时 down 还要加 -v,但那意味着命名卷里的数据一并删除,生产环境执行前务必先备份。

docker compose run --rm 和 docker compose up -d 有什么不同?

up -d 是把整套服务拉起来常驻后台,容器会一直运行;run --rm 是针对某个服务跑一次性命令,跑完因为 --rm 立刻把临时容器删掉。前者适合长期驻留的服务,后者适合迁移脚本、临时查库这类活干完就走的场景。

compose 用的数据卷在 docker volume ls 里叫什么,怎么确认有哪些?

命名规则是「项目名_卷名」,所以看到 myapp_db 就知道是项目 myapp 定义的 db 卷,而不是手工创建的卷。想确认当前 compose 文件一共声明了哪些卷,用 docker compose config --volumes 把它列出来,不必翻 YAML 猜。

我怎么知道服务端口最终落在了宿主机的哪个端口上?

用 docker compose port svc 80,把服务名和容器内端口传进去,它会回显映射到宿主机的实际端口。这个值在宿主机端口写成 0 或交给系统分配时尤其有用,光看 compose 文件是猜不出最终端口的。

镜像更新和重新构建的先后顺序应该怎么排?

基础镜像过期先 docker compose pull 拉取新镜像,本地代码有改动再 docker compose build 重新构建,构建完用 docker compose up -d 让新镜像生效。想一条命令搞定就写 docker compose up -d --build,它会在启动前先构建。怀疑缓存导致改动没进镜像时,给 build 加 --no-cache 做全量构建。

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年7月21日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们