# docker compose up

## 描述

* 构建 (build)、（重新）创建 (re-create)、启动 (start) 并 **附加** (attach) 服务对应的容器。
* 如果某些服务还没有运行，它也会启动与之关联 (linked) 的服务。
* `docker compose up` 会聚合 (aggregate) 各个容器的输出，就像使用 `docker compose logs --follow`。
* 命令退出时（如果不是后台模式，未使用 `--detach`），所有容器都会停止。
* 如果使用 `--detach`（或 `-d`），容器将在后台运行 (detached 模式)，命令结束后它们仍然保持运行。
* 如果某个服务已经有对应的容器，并且在创建之后服务的配置或镜像 (image) 改变了，`docker compose up` 会停止并重新创建这些容器。但它会保留挂载 (mount) 的卷 (volumes)。
* 如果你不想让 Compose 重新创建已经存在的容器，可以使用 `--no-recreate`。
* 如果你想 **强制** 停止并重新创建所有容器（即使配置或镜像没有变更），可以使用 `--force-recreate`。
* 如果执行过程中出现错误，命令会返回退出码 (exit code) `1`。
* 如果使用 `SIGINT` (例如 Ctrl + C) 或 `SIGTERM` 中断进程，所有容器将停止，并且退出码为 `0`。

## 选项

下面是 `docker compose up` 支持的主要命令行选项及其含义 (根据文档整理)：

| 选项                             | 默认 / 说明               | 描述                                                                           |
| ------------------------------ | --------------------- | ---------------------------------------------------------------------------- |
| `--abort-on-container-exit`    | —                     | 如果 **任何** 容器停止 (exit)，则停止所有容器。这个选项与 `-d` (detach) 不兼容。                       |
| `--abort-on-container-failure` | —                     | 如果有容器 **失败退出**（退出码非零），就停止所有容器。与 `-d` 冲突。                                     |
| `--always-recreate-deps`       | —                     | 总是重新创建依赖 (dependency) 容器。与 `--no-recreate` 不兼容。                              |
| `--attach [SERVICE …]`         | —                     | 限定只附加 (attach) 指定服务 (service) 的日志/输出。                                        |
| `--attach-dependencies`        | —                     | 自动附加 (attach) 指定服务所依赖 (linked) 的其他服务容器的日志输出。                                 |
| `--build`                      | —                     | 在启动容器之前构建镜像 (如果需要的话)。                                                        |
| `-d, --detach`                 | —                     | 后台运行 (detached 模式) — 容器启动后命令立即返回。                                            |
| `--exit-code-from SERVICE`     | —                     | 返回指定服务容器的退出码 (exit code)。使用此选项隐含 `--abort-on-container-exit`。                |
| `--force-recreate`             | —                     | 强制重新创建容器，即使它们的配置或镜像没有变化。                                                     |
| `--menu`                       | —                     | 启用交互式快捷菜单 (interactive menu)；与 `--detach` 不兼容。 (也可以通过环境变量 `COMPOSE_MENU` 控制) |
| `--no-attach`                  | —                     | 不附加 (attach) 到任何服务容器的日志/输出。                                                  |
| `--no-build`                   | —                     | 不构建镜像（即使本地没有镜像也不 build）。                                                     |
| `--no-color`                   | —                     | 输出为单色 (无 ANSI 颜色)，禁用彩色提示。                                                    |
| `--no-deps`                    | —                     | 不启动服务所依赖 (linked) 的其他服务。                                                     |
| `--no-log-prefix`              | —                     | 日志行中不打印前缀 (log prefix)。                                                      |
| `--no-recreate`                | —                     | 如果容器已存在，则不重新创建它们。与 `--force-recreate` 冲突。                                    |
| `--no-start`                   | —                     | 创建服务 (容器) 但不启动它们。                                                            |
| `--pull <policy>`              | —                     | 在启动前拉取镜像 (pull)，策略可以是 `"always"`、`"missing"`、`"never"`。                      |
| `--quiet-pull`                 | —                     | 拉取镜像时不打印拉取 (pull) 进度。                                                        |
| `--remove-orphans`             | —                     | 移除 (删除) Compose 文件中 **未定义** 但仍在运行 (orphan) 的容器。                              |
| `-V, --renew-anon-volumes`     | —                     | 对匿名卷 (anonymous volumes) 重新创建 (不使用旧容器里的匿名卷)。                                 |
| `--scale SERVICE=NUM`          | —                     | 将某个服务实例扩展 (scale) 到指定数量。如果指定了 scale，会覆盖 Compose 文件中对应服务的 scale 设置。           |
| `-t, --timeout TIMEOUT`        | 默认值约为 **10 秒** (取决版本) | 停止容器时，等待信号 (SIGTERM) 的超时时间 (以秒为单位)。                                          |
| `--timestamps`                 | —                     | 在日志输出中显示时间戳 (timestamp)。                                                     |
| `--wait`                       | —                     | 等待服务 **运行或者健康 (health)**。该选项会在后台 (隐含 detach) 模式下运行。                          |
| `--wait-timeout`               | —                     | 等待服务变为运行 / 健康的最大时间 (以秒为单位)。                                                  |
| `-w, --watch`                  | —                     | 监视 (watch) 源代码 (或文件)，如果文件发生更改，就重新构建 / 刷新容器。                                  |
