前言
Docker Compose V2 是目前 Docker 生态中默认且推荐的编排工具版本。它不再是独立的 Python 程序,而是作为 Docker CLI 的原生插件(Go 语言编写)直接集成在 Docker 命令体系中
docker compose V2版本新属性
语法
V2 将 docker-compose(带连字符)替换为 docker compose(空格分隔的子命令)
docker compose up -d
查询版本
安装完docker compose版本之后,可以执行以下命令查看版本
docker compose version

version字段去掉
yaml
version: '3.0'
services:
mysql:
image: mysql:9.4.0
container_name: mysql9
ports:
- "3:3306"
volumes:
- /home/my.cnf:/etc/my.cnf
- ./data:/var/lib/mysql
- ./logs:/var/log/mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
restart: unless-stopped
privileged: true
V2版本可以省去version这个字段,存在的话,会输出警告

include 指令
模块化拆分多个 compose 文件(替代旧的 -f 多文件合并)
yaml
include:
- path: ./services/db.yml
- path: ./services/cache.yml
depends_on
depends_on 是 Docker Compose 中用于定义服务依赖关系的核心指令,它控制的是服务的启动和关闭顺序,而非服务之间的网络连通性
yaml
services:
web:
depends_on:
- db
- redis
语法可以使用
yaml
# docker-compose.yml
include:
- path: /home/docker-compose1.yml
env_file: /home/.env
services:
app:
depends_on:
database:
condition: saas-lock
然后执行
docker compose up -d
启动容器
docker compose watch
这是 V2 对开发者最友好的特性。它允许你定义文件变更时的自动同步策略,无需反复执行 up --build。
服务依赖条件增强 (condition)
V2 原生支持基于健康检查的启动顺序控制,不再需要 wait-for-it.sh 等外部脚本:
yaml
1services:
2 mysql9:
3 healthcheck:
4 test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
5 interval: 5s
6 retries: 10
7
8 app:
9 depends_on:
10 mysql9:
11 condition: service_healthy # ✅ 等待健康检查通过
12 required: true # ✅ 必需服务,失败则 app 不启动
13 redis:
14 condition: service_started # 仅等待启动,不等健康
15 required: false # ✅ 可选服务,redis 挂了 app 仍能启动
| condition | 含义 |
|---|---|
service_started |
容器已启动(默认行为) |
service_healthy |
健康检查通过 |
service_completed_successfully |
一次性任务成功退出(适用于 init 容器) |
总结
docker compose V2版本在体验上比v1版本更可以