目录
docker compose up 命令教程:参数说明与示例
docker compose up 会创建并启动 compose.yaml 中的服务。入门内容请见 Docker Compose 入门,其他 compose 命令请见 docker compose 命令。
语法
docker compose up [参数] [服务名称...]
不指定服务时会启动全部服务。up 会依次:创建网络、创建 Volume、按需拉取或构建镜像、创建容器(配置有变化的容器会重建)、启动容器。
参数
| 参数 | 说明 |
|---|---|
-d, --detach | 在后台运行。不添加时,日志会显示在前台,按 Ctrl+C 停止 |
--build | 启动前先构建镜像 |
--no-build | 不构建;镜像不存在时失败 |
--pull always|missing|never | 启动前是否拉取镜像 |
--wait | 等到服务都在运行(有健康检查的服务须为 healthy)后才返回,隐含 -d |
--wait-timeout 秒数 | --wait 的最长等待时间 |
--force-recreate | 即使配置未变也重建容器 |
--no-recreate | 容器已存在时不重建 |
--no-deps | 不启动 depends_on 指定的服务 |
--scale 服务=数量 | 启动多个副本 |
--remove-orphans | 删除 compose.yaml 中已不存在的服务对应的容器 |
-V, --renew-anon-volumes | 重建匿名 Volume,而不是沿用旧容器的 Volume |
--abort-on-container-exit | 任一容器停止时就停止全部容器(不能与 -d 一起使用) |
--exit-code-from 服务 | 将该服务的退出代码作为命令的退出代码,隐含上一项 |
-t, --timeout 秒数 | 停止容器时等待的秒数 |
-w, --watch | 监视文件变化并同步或重建(见 Node.js 应用) |
--no-start | 只创建,不启动 |
--quiet-pull / --quiet-build | 不显示拉取/构建进度 |
--no-log-prefix、--timestamps、--no-color | 前台模式的日志格式 |
--dry-run | 只显示将执行的操作,不实际运行 |
示例项目
services:
web:
image: nginx:1.30-alpine
ports:
- "8080:80"
depends_on:
- cache
cache:
image: redis:8-alpine
volumes:
- cache_data:/data
worker:
image: alpine:3.23
command: ["sh", "-c", "echo worker done"]
volumes:
cache_data:
启动全部服务
$ docker compose up -d
[+] up 15/15
✔ Image redis:8-alpine Pulled 3.4s
✔ Network ref-compose_default Created 0.0s
✔ Volume ref-compose_cache_data Created 0.0s
✔ Container ref-compose-worker-1 Started 0.4s
✔ Container ref-compose-cache-1 Started 0.6s
✔ Container ref-compose-web-1 Started 0.8s
$ docker compose ps -a
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
ref-compose-cache-1 redis:8-alpine "docker-entrypoint.s…" cache 1 second ago Up Less than a second 6379/tcp
ref-compose-web-1 nginx:1.30-alpine "/docker-entrypoint.…" web 1 second ago Up Less than a second 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp
ref-compose-worker-1 alpine:3.23 "sh -c 'echo worker …" worker 1 second ago Exited (0) Less than a second ago
worker 执行完 echo 后就结束了,因此状态是 Exited (0)。这是正常的一次性服务。
只处理部分服务
$ docker compose up -d --no-deps web
[+] up 1/1
✔ Container ref-compose-web-1 Running 0.0s
$ docker compose up -d --force-recreate web
[+] up 2/2
✔ Container ref-compose-cache-1 Running 0.0s
✔ Container ref-compose-web-1 Started 0.4s
$ docker compose up -d --wait cache
[+] up 1/1
✔ Container ref-compose-cache-1 Healthy 0.5s
--no-deps web:只处理web,不管它依赖的cache。配置没有变化,因此只显示Running。--force-recreate web:即使配置未变也重建web(Started);由于没有添加--no-deps,因此也会检查depends_on指定的cache(Running)。--wait cache:等到cache就绪后才返回。redis 镜像没有定义健康检查时,容器正在运行就算就绪。
--scale:多个副本
$ docker compose up -d --scale worker=3 worker
[+] up 3/3
✔ Container ref-compose-worker-3 Started 0.5s
✔ Container ref-compose-worker-2 Started 0.3s
✔ Container ref-compose-worker-1 Started 0.2s
$ docker compose ps -a worker
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
ref-compose-worker-1 alpine:3.23 "sh -c 'echo worker …" worker 4 seconds ago Exited (0) Less than a second ago
ref-compose-worker-2 alpine:3.23 "sh -c 'echo worker …" worker 1 second ago Exited (0) Less than a second ago
ref-compose-worker-3 alpine:3.23 "sh -c 'echo worker …" worker 1 second ago Exited (0) Less than a second ago
--scale worker=3 会为 worker 创建 3 个容器,名称会自动编号为 -1、-2、-3。配置了对应主机端口(ports)的服务不能直接扩展,因为主机端口会冲突。
--exit-code-from:在 CI 中运行测试
$ docker compose up --abort-on-container-exit --exit-code-from worker worker
[+] up 2/2
✔ Container ref-compose-worker-2 Removed 0.0s
✔ Container ref-compose-worker-3 Removed 0.0s
Attaching to worker-1
worker-1 | worker done
worker-1 exited with code 0
Aborting on container exit...
Container ref-compose-worker-1 Stopping
Container ref-compose-worker-1 Stopped
w Enable Watch d Detach
- 只运行
worker;它结束时(--abort-on-container-exit),整个up也会结束,而up的退出代码就是worker的退出代码(--exit-code-from)。可在 CI 中用来运行测试服务:测试失败 → 命令失败 → CI 失败。 - 上一步
--scale创建的worker-2、worker-3这次被删除了(Removed),因为没有再次指定副本数,所以恢复为默认的 1 个。
相关章节
动手练习
练习:修改示例中的 compose.yaml,把 web 的端口改为 8081:80,用一条命令应用,并确认只有 web 被重建。
答案
docker compose up -d
输出中 web 显示 Recreated/Started,cache 显示 Running(没有变化),docker compose ps 中 web 的 PORTS 变为 0.0.0.0:8081->80/tcp。
常见问题
修改 compose.yaml 后如何应用?
直接再次运行 docker compose up -d。Compose 会比较配置,只重建有变化的服务。docker compose restart 不会应用新配置,实际测试见 [docker compose 命令](/zh/docker/compose-commands/)。
修改了 Dockerfile,为什么运行 up -d 没有重新构建?
镜像已经存在时,up 不会自动重新构建。添加 --build:docker compose up -d --build。
--wait 和 depends_on 的 service_healthy 有什么区别?
depends_on 控制服务之间的启动顺序;--wait 让 docker compose up 命令本身等到所有服务都在运行(有健康检查的服务须为 healthy)后才返回,适合在脚本和 CI 中继续执行下一步。
更新于 2026年10月14日