问题描述
在 1Panel 中对容器执行镜像升级操作时,因新镜像触发了 Docker API 版本兼容性问题导致创建新容器失败,而此时原容器已被删除,回退操作同样失败,最终导致服务完全不可用。
复现步骤
- 在 1Panel 面板中,进入"容器"页面
- 选择一个运行中的容器,点击"升级"
- 填写新镜像地址并确认升级
- 升级流程:拉取新镜像 -> 删除原容器 -> 创建新容器(失败)-> 尝试恢复原容器(失败)
预期行为
升级失败后,应能成功回退到原容器的运行状态,保证服务不中断。或者在删除原容器之前,先验证新容器能否成功创建。
实际行为
原容器被删除后,新容器创建失败,回退也失败,导致服务完全丢失。
错误日志
2026/07/05 08:48:47 升级镜像 [xxx:latest] 任务开始 [START]
2026/07/05 08:48:47 开始拉取容器镜像 xxx:latest
2026/07/05 08:48:51 拉取容器镜像 xxx:latest 成功
2026/07/05 08:48:51 ----------------- xxx -----------------
2026/07/05 08:48:51 获取容器基本信息 成功
2026/07/05 08:48:51 删除原容器 xxx 成功
2026/07/05 08:48:51 容器更新失败,现在开始恢复原容器
2026/07/05 08:48:51 创建新容器 xxx 失败: upgrade container failed, err: "specify mac-address per network" requires API version 1.44, but the Docker daemon API version is 1.41
2026/07/05 08:48:52 [TASK-END]
环境信息
- 1Panel 版本: v2.2.2
- 操作系统: 群晖 NAS (DSM)
- Docker 版本: Docker Engine 20.10 (API 1.41)
- 部署方式: Docker
问题分析
- 升级流程存在风险:当前流程是"先删除原容器 -> 再创建新容器",一旦新容器创建失败,原容器已经不存在,无法回退。
- 根因:新镜像中包含了 mac-address 网络配置,需要 Docker API 1.44+,而当前 Docker daemon API 版本为 1.41,不兼容。
- 回退机制失效:日志显示"恢复原容器"步骤也失败了,因为原容器配置(镜像、挂载、网络等)在删除后无法完整重建。
建议
- 先创建后删除:建议改为先创建新容器,验证成功后再删除原容器(类似蓝绿部署策略)。
- 预检机制:在删除原容器前,先检查新镜像是否与当前 Docker daemon 版本兼容。
- 备份容器配置:删除原容器前,完整保存其 docker inspect 配置,确保回退时有足够信息重建。
- 回退可靠性:确保回退流程能真正恢复原容器,而不是简单地重新创建(可能丢失配置)。
问题描述
在 1Panel 中对容器执行镜像升级操作时,因新镜像触发了 Docker API 版本兼容性问题导致创建新容器失败,而此时原容器已被删除,回退操作同样失败,最终导致服务完全不可用。
复现步骤
预期行为
升级失败后,应能成功回退到原容器的运行状态,保证服务不中断。或者在删除原容器之前,先验证新容器能否成功创建。
实际行为
原容器被删除后,新容器创建失败,回退也失败,导致服务完全丢失。
错误日志
环境信息
问题分析
建议