Docker Compose file version 3.8 和 3.9 版本区别有哪些

文章导读
如果你正在纠结选 3.8 还是 3.9,直接用 3.8 就好,3.9 在官方规范中并不是正式发布的稳定版本,生产环境建议用 3.8 或更新的 Compose Specification 格式。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

如果你正在纠结选 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 版本的明确记录。

Docker Compose file version 3.8 和 3.9 版本区别有哪些

分步处理

步骤 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:alpine
    ports:
      - "80:80"

怎么验证是否生效

配置文件写完后,用以下命令验证语法是否正确:

# 检查配置文件语法
docker-compose config
# 或
docker compose config

如果输出解析后的完整 YAML 且没有报错,说明格式版本与工具版本兼容。如果报错提示类似 Version in "./docker-compose.yml" is unsupported,说明工具版本太低,需要升级工具或降低文件格式版本号。

Docker Compose file version 3.8 和 3.9 版本区别有哪些

启动服务后检查容器状态:

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