目录

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日