升级Docker后旧容器启动失败,主因是运行时名称(如docker-runc→runc)、镜像清单格式(需OCI标准v1+json)及docker-compose版本(v1→v2)三类不兼容;须分别检查daemon.json、docker version与compose version并同步更新配置。

升级 Docker 后旧容器启动失败,不是指令写错(比如不存在的 dockerstart),而是运行时、镜像格式或配置层发生了不兼容变化。排查要聚焦在三个关键点:运行时名称、镜像清单格式、编排工具版本。
检查运行时配置是否过时
最常见报错是 unknown or invalid runtime name: docker-runc。这是因旧版 Docker(如 1.13)默认用 docker-runc,而新版(18.06+)已切换为 runc 或 io.containerd.runc.v2。
- 查看 systemd 服务配置:
sudo vi /usr/lib/systemd/system/docker.service - 找到
ExecStart=行,把含--add-runtime docker-runc=...的部分删掉或替换为--add-runtime runc=io.containerd.runc.v2 - 确认
--default-runtime=runc(不是docker-runc) - 执行
sudo systemctl daemon-reload && sudo systemctl restart docker
验证镜像是否符合 OCI 标准
如果启动时报 mediaType not 'application/vnd.oci.image.manifest.v1+json',说明镜像用的是新 OCI 清单格式,但你的 Docker 版本太老(比如 1.13.x),不支持该格式。
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 运行
docker version确认引擎版本;低于 18.09 基本无法处理现代镜像 - 不要尝试“降级镜像”,应升级 Docker 到 20.10 或更高稳定版
- 若必须保留旧环境,可重新拉取兼容旧版的镜像(如带
:legacy标签的变体)
确认 docker-compose 是否匹配新版 API
升级 Docker 后,docker-compose 命令可能失效,尤其从 v1(Python)切到 v2(Go)后命令和语法有差异。
- 查版本:
docker compose version(v2)或docker-compose --version(v1) - v2 不再需要单独安装
docker-compose,它已集成进 Docker CLI;若仍用 v1,请卸载并改用docker compose - 检查
docker-compose.yml中的version:字段是否过低(如"2"不被 v2 支持,应改用"3.8"或更高)
顺手做几项基础验证
避免被次要问题干扰主因:
- 运行
docker info看存储驱动(如overlay2)是否正常,/var/lib/docker目录是否有足够空间 - 执行
sudo systemctl status docker确认守护进程已成功重启,无报错日志 - 用
docker logs <容器名>查看容器上次退出的具体错误,不是启动失败的提示,而是容器内进程崩溃原因

















