Docker 20.10 升级到 24.0 版本需要注意哪些兼容性配置变更?

文章导读
先说结论:Docker 20.10 升级至 24.0 属于跨大版本升级,核心风险在于 Docker Compose 命令从 V1 独立二进制变为 V2 插件模式,以及底层 Cgroup 驱动默认行为变更。生产环境升级必须先停止服务备份数据,并确认 CI/CD 脚本兼容性。
📋 目录
  1. A 核心配置变更对比
  2. B 升级前准备与源配置
  3. C 执行升级与命令适配
  4. D 验证与回滚方案
  5. E 常见风险排查
A A

先说结论:Docker 20.10 升级至 24.0 属于跨大版本升级,核心风险在于 Docker Compose 命令从 V1 独立二进制变为 V2 插件模式,以及底层 Cgroup 驱动默认行为变更。生产环境升级必须先停止服务备份数据,并确认 CI/CD 脚本兼容性。

  • 适合:需要新特性及安全补丁,且有能力调整运维脚本的团队
  • 先准备:停止 Docker 服务后备份 /var/lib/docker,检查 daemon.json 中 cgroup 相关配置
  • 验收:验证容器网络连通性、存储卷权限及 docker compose 命令可用性

核心配置变更对比

升级前需重点核对以下配置项,部分参数在 24.0 中行为已发生变化:

配置项/命令 Docker 20.10 Docker 24.0 处理建议
Compose 命令 docker-compose (独立二进制) docker compose (CLI 插件) 脚本中的连字符需移除,或安装 compose-plugin 兼容包
Cgroup 驱动 默认多为 cgroup v1 默认跟随系统使用 cgroup v2 运行 docker info 查看,不要盲目移除 exec-opts
日志驱动 json-file 默认配置 json-file 默认配置 (日志轮转策略建议显式配置) 检查 daemon.json 中 log-opts 是否满足审计需求
安全选项 部分 seccomp 配置较旧 默认安全配置文件更新 特权容器需重新评估安全性

升级前准备与源配置

1. 停止服务并备份数据
严禁在 Docker 运行时直接复制数据目录,否则可能导致镜像或容器元数据损坏。

sudo systemctl stop docker
sudo cp -r /var/lib/docker /var/lib/docker.bak
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak

2. 配置官方软件源
系统自带源可能版本滞后,需配置 Docker 官方源以确保能拉取 24.0 版本。以下以 Ubuntu 为例:

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg `--dearmor` -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg `--print-architecture`) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

执行升级与命令适配

1. 安装指定版本
升级时建议指定版本号和组件,避免意外升级到更新的不稳定版本。

sudo apt-get install docker-ce=5:24.0.0-1~ubuntu.22.04~jammy docker-ce-cli=5:24.0.0-1~ubuntu.22.04~jammy containerd.io
sudo systemctl start docker

2. Compose 命令迁移
旧脚本中的 docker-compose 命令将失效,需调整为 docker compose(空格分隔)。

Docker 20.10 升级到 24.0 版本需要注意哪些兼容性配置变更?
# 旧写法 (20.10 常见)
docker-compose up -d

# 新写法 (24.0 标准)
docker compose up -d

# 验证插件是否就绪
docker compose version

验证与回滚方案

1. 基础功能验证
确认 CLI 版本及容器启动正常,注意命令参数格式修正。

# 检查版本
docker version

# 测试容器运行 (注意参数使用双横杠)
docker run `--rm` hello-world

# 检查存量容器状态
docker ps -a

2. 紧急回滚步骤
若升级后业务异常,需立即回滚至原版本。

sudo systemctl stop docker
# 恢复数据目录
sudo rm -rf /var/lib/docker
sudo mv /var/lib/docker.bak /var/lib/docker
# 恢复配置文件
sudo mv /etc/docker/daemon.json.bak /etc/docker/daemon.json
# 安装旧版本包 (需提前下载好 20.10 对应的 deb/rpm 包)
sudo apt-get install docker-ce=5:20.10.24~3-0~ubuntu-jammy docker-ce-cli=5:20.10.24~3-0~ubuntu-jammy
sudo systemctl start docker

常见风险排查

1. Cgroup 驱动不一致
若升级后容器无法启动,检查是否因系统内核升级导致 cgroup v2 生效而配置仍强制 v1。

docker info | grep Cgroup
# 若显示 cgroup v2,请检查 daemon.json 中是否强制指定了 cgroup-parent 或相关 opts
# 建议根据实际环境测试后调整,不要直接删除生产环境配置

2. 网络驱动兼容性
自定义网络或 overlay 网络可能需重建。若容器间无法通信,尝试重建网络:

docker network rm 
docker network create 

3. 权限与挂载问题
新版 Docker 对挂载卷的权限检查更严格,若出现 Permission denied,检查宿主机目录权限及 SELinux/AppArmor 状态。