如果你正在纠结选 3.8 还是 3.9,直接用 3.8 就好,3.9 在官方规范中并不是正式发布的稳定版本,生产环境建议用 3.8 或更新的 Compose Specification 格式。
先说结论:Docker Compose file format 3.8 是目前广泛支持的稳定版本,3.9 并非官方正式发布的规范版本,新项目建议用 3.8 或转向无版本号的 Compose Specification。
- 适合:生产环境、需要稳定兼容性的项目用 3.8
- 重点看:官方文档中 3.8 之后已转向 Compose Specification 新规范
- 别忽略:文件格式版本与 docker-compose 工具版本是两回事,需匹配使用
命令速用版
先确认你当前的 docker-compose 工具版本和文件格式支持情况:
docker-compose `--version` docker compose version
查看当前 compose 文件使用的格式版本:
head -n 1 docker-compose.yml
如果要用 3.8 格式,文件开头这样写:
version: '3.8' services:web:image: nginx:alpine
为什么会这样
Docker Compose 的版本号其实有两层含义,很多人容易混淆:
1. 工具版本:比如 docker-compose 1.29.2 或 docker compose v2.27.0,这是你安装的命令行工具本身的版本。
2. 文件格式版本:docker-compose.yml 文件第一行的 version: '3.8',这是配置文件的语法规范版本。
两者的关系类似「解释器」和「脚本语法」——工具版本需要能解析文件格式版本,否则会报错。根据公开资料,version 3.8 需要 docker-compose 1.25.0+ 或 Compose V2 才能正确解析。
关于 3.9 版本,在 Docker 官方 Compose file 规范文档中,3.8 之后官方逐渐转向了新的 Compose Specification 规范,不再使用数字版本号命名。公开资料中没有看到 3.9 作为正式发布的 Compose file format 版本的明确记录。
分步处理
步骤 1:确认当前环境
先检查你用的是哪个 compose 工具:
# 旧版独立工具 docker-compose `--version`# 新版集成到 Docker CLI docker compose version
步骤 2:检查文件格式兼容性
如果你的 docker-compose 工具版本较旧(比如 1.9),使用 version: '3.8' 会报错提示版本不支持。这时有两个选择:
# 方案 A:升级工具(推荐) sudo curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose# 方案 B:降级文件格式版本 # 将 version: '3.8' 改为 version: '3.2' 或更低
步骤 3:新项目选型建议
如果是新项目,建议直接使用 Compose V2(docker compose 命令,无连字符),文件格式可以用 3.8 或省略 version 字段(新版规范支持):
# 新版 compose.yaml 可不写 version 字段 services:web:image: nginx:alpineports:- "80:80"
怎么验证是否生效
配置文件写完后,用以下命令验证语法是否正确:
# 检查配置文件语法 docker-compose config # 或 docker compose config
如果输出解析后的完整 YAML 且没有报错,说明格式版本与工具版本兼容。如果报错提示类似 Version in "./docker-compose.yml" is unsupported,说明工具版本太低,需要升级工具或降低文件格式版本号。
启动服务后检查容器状态:
docker-compose ps # 或 docker compose ps
常见坑
1. 混淆工具版本和文件格式版本
很多人看到 version: '3.8' 以为是 docker-compose 工具要装 3.8 版本,实际上这是两回事。工具版本用 docker-compose `--version` 查看,文件格式版本在 yml 文件第一行。
2. 旧工具解析新格式
docker-compose 1.9 等旧版本无法解析 3.8 格式,会直接报错。遇到这种情况优先升级工具,而不是降级文件格式(除非有特殊兼容性要求)。
3. Swarm 部署配置差异
version 3.x 系列支持 deploy 等 Swarm 集群相关配置,但本地 docker-compose up 不会生效这些配置。如果只用本地开发测试,部分 deploy 配置可能被忽略。
4. 3.9 版本来源不明
网上有些教程提到 version: '3.9',但在 Docker 官方 Compose file 规范文档中,3.8 之后已转向新的规范体系。使用非官方确认的版本号可能导致兼容性问题,建议用 3.8 或参考最新官方文档。
参考来源
- Docker 官方文档 - Compose file version 3 规范:https://docs.docker.com/compose/compose-file/compose-file-v3/
- Docker Compose 安装文档:https://docs.docker.com/compose/install/
- GitHub Docker Compose 项目仓库:https://github.com/docker/compose
原文链接:https://www.zjcp.cc/ask/10081.html
