docker compose升级版本问题:KeyError: 'ContainerConfig'
一、问题场景(开发者高频遇到)
在CentOS7等Linux系统中,执行 docker\-compose up \-d 启动容器(如Harbor、业务服务容器)时,突然抛出如下报错,导致容器无法启动,且排除配置文件写错的情况:
bash
ERROR: for harbor-log 'ContainerConfig'
ERROR: for log 'ContainerConfig'
Traceback (most recent call last):
File "docker-compose", line 3, in <module>
File "compose/cli/main.py", line 81, in main
File "compose/cli/main.py", line 203, in perform_command
File "compose/metrics/decorator.py", line 18, in wrapper
File "compose/cli/main.py", line 1186, in up
File "compose/cli/main.py", line 1182, in up
File "compose/project.py", line 702, in up
File "compose/parallel.py", line 108, in parallel_execute
File "compose/parallel.py", line 206, in producer
File "compose/project.py", line 688, in do
File "compose/service.py", line 581, in execute_convergence_plan
File "compose/service.py", line 503, in _execute_convergence_recreate
File "compose/parallel.py", line 108, in parallel_execute
File "compose/parallel.py", line 206, in producer
File "compose/service.py", line 496, in recreate
File "compose/service.py", line 615, in recreate_container
File "compose/service.py", line 334, in create_container
File "compose/service.py", line 922, in _get_container_create_options
File "compose/service.py", line 962, in _build_container_volume_options
File "compose/service.py", line 1549, in merge_volume_bindings
File "compose/service.py", line 1579, in get_container_data_volumes
KeyError: 'ContainerConfig'
补充场景:执行 docker\-compose version 查看版本,显示为 1.29.2 及以下旧版本(如案例中 docker\-compose version 1\.29\.2, build 5becea4c),且系统中Docker已升级到较新版本。
二、问题核心根源(精准定位,避免踩坑)
很多开发者会误以为是 docker\-compose\.yml 配置错误,实则不然------这个报错的核心原因是 Docker Compose 版本过旧,与当前系统中的 Docker 引擎版本不兼容。
通俗解释:Docker 引擎升级后,其内部的容器配置元数据格式发生了变化,但老旧的 Docker Compose(如1.29.2版本)仍沿用旧的方式读取配置,无法找到新版本 Docker 中对应的 ContainerConfig 配置项,进而触发 KeyError 报错。
关键补充:Docker Compose 已从独立的Python脚本(v1版本,如1.29.2)升级为 Docker CLI 集成插件(v2版本),v1版本已被官方废弃,无法适配新版本 Docker 引擎的API要求,这也是该报错高频出现的核心原因之一。
三、标准解决方案(通用升级步骤)
解决思路:卸载/备份旧版本 Docker Compose,下载并安装稳定的 v2 版本(本文以稳定版 v2.20.0 为例,适配绝大多数 Docker 版本),步骤清晰可直接复制执行。
步骤1:查看旧版本及安装路径
先确认当前 Docker Compose 版本和安装位置(通常在 /usr/bin/ 或 /usr/local/bin/ 目录下):
bash
# 查看当前版本
docker-compose version
# (可选)精准定位安装路径(若后续备份失败,可用于排查)
which docker-compose
步骤2:备份并删除旧版本
为避免误删导致异常,先备份旧版本,再删除(根据步骤1查到的路径修改命令):
bash
# 情况1:若旧版本在 /usr/bin/ 目录下(最常见)
sudo mv /usr/bin/docker-compose /usr/bin/docker-compose.bak
# 情况2:若旧版本在 /usr/local/bin/ 目录下
sudo mv /usr/local/bin/docker-compose /usr/local/bin/docker-compose.bak
步骤3:下载新版本 Docker Compose
下载 v2.20.0 稳定版(适配Linux系统,自动匹配系统架构),下载路径可根据网络情况重复尝试:
bash
# 下载新版本到系统可执行路径(以 /usr/bin/ 为例)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose
# 若下载速度慢,可更换为国内镜像源(备选)
# sudo curl -L "https://mirrors.aliyun.com/docker-toolbox/linux/compose/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose
注意:若出现"网页解析失败""无法连接"等下载报错,可检查网络连接,或多次重试下载命令,也可更换上述备选国内镜像源。
步骤4:赋予执行权限
下载完成后,给新版本 Docker Compose 赋予可执行权限,否则无法运行:
bash
sudo chmod +x /usr/bin/docker-compose
步骤5:验证升级是否成功
执行版本查看命令,若输出 v2.x 版本(如 v2.20.0),说明升级成功:
bash
docker-compose version
预期输出(类似):Docker Compose version v2\.20\.0
步骤6:重启容器验证
升级完成后,重新启动之前报错的容器(以Harbor为例),此时报错应已解决:
bash
# 进入容器部署目录(如Harbor安装目录)
cd /opt/harbor
# 重启容器
docker-compose down
docker-compose up -d
四、高频实操问题及解决方案(重点!开发者常踩坑)
问题:备份旧版本时,提示"无法获取文件状态(stat): 没有那个文件或目录"
报错示例:
bash
[root@localhost /]# sudo mv /usr/bin/docker-compose /usr/bin/docker-compose.bak
mv: 无法获取"/usr/bin/docker-compose" 的文件状态(stat): 没有那个文件或目录
原因分析
该报错是因为 Docker Compose 的实际安装路径,与你执行备份命令时指定的路径(如 /usr/bin/)不一致,旧版本并未安装在该目录下。
解决方案(无需找旧路径,直接覆盖安装)
无需费劲查找旧版本具体位置,直接将新版本下载到 /usr/local/bin/ 目录(该目录在系统环境变量中优先级更高),自动覆盖旧版本,步骤如下:
bash
# 1. 直接下载新版本到 /usr/local/bin/ 目录
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 2. 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 3. 验证版本(此时应显示 v2.20.0)
docker-compose version
补充说明
若执行 docker\-compose version 后,仍显示旧版本(如1.29.2),说明旧版本路径在系统环境变量中优先级更高,可执行 which docker\-compose 找到旧版本路径,手动删除旧文件后,再次验证即可。
五、注意事项(面向开发者,避坑指南)
-
版本匹配:Docker Compose v2 版本与 Docker 引擎版本需匹配,建议选择 v2.20.0 及以上稳定版,可适配绝大多数新版本 Docker(参考 Docker 官方兼容性矩阵,v2 版本可适配 Docker 19.03.0+)。
-
下载问题:若 GitHub 下载失败,优先使用国内镜像源(如阿里云镜像),避免因网络问题导致升级失败。
-
权限问题:所有命令建议用
sudo执行,避免因权限不足导致文件无法移动、下载或赋予执行权限失败。 -
后续维护:升级完成后,建议将 Docker Compose 升级命令记录到运维文档,后续 Docker 引擎升级后,同步升级 Docker Compose,避免再次出现版本不兼容问题。
-
命令差异:Docker Compose v2 支持两种命令格式(
docker\-compose和docker compose),两种格式均可正常使用,推荐使用docker compose(官方新语法)。
六、总结(快速排查+核心要点)
-
核心结论:
KeyError: \&\#39;ContainerConfig\&\#39;报错,99% 是 Docker Compose 版本过旧(v1版本,如1.29.2)与新版本 Docker 引擎不兼容导致,与配置文件无关,无需修改docker\-compose\.yml。 -
快速解决:备份旧版本 → 下载 v2 稳定版 → 赋予执行权限 → 验证版本,全程5分钟可完成,且步骤通用,适用于所有 Linux 系统(CentOS、Ubuntu 等)。
-
避坑关键:实操中若遇到"路径找不到"的问题,直接将新版本下载到
/usr/local/bin/目录,无需查找旧路径,高效解决问题。 -
长期建议:放弃使用已废弃的 Docker Compose v1 版本,统一使用 v2 版本,后续随 Docker 引擎同步升级,可彻底避免此类版本兼容问题。