Ubuntu 22.04 部署 Docker 后 containerd 启动失败,通常是因为 containerd 配置文件缺失或服务冲突。最推荐的处理方向是重新生成 containerd 默认配置并重启服务,适用场景为全新安装或升级后报错,风险边界在于操作前需备份现有配置以免丢失自定义参数。
先说结论:大部分启动失败源于配置文件的 SystemdCgroup 设置未开启或配置路径错误,重新生成配置并修正参数可解决多数问题。
- 先确认:使用 systemctl status containerd 查看服务状态,通过 journalctl -u containerd 读取报错日志。
- 先处理:执行 containerd config default 生成默认配置,修改 SystemdCgroup 为 true 后重启服务。
- 再验证:运行 docker info 确认 Cgroup Driver 显示 systemd,且容器能正常拉起。
命令速用版
如果确认是配置缺失导致的启动失败,可直接执行以下命令重置配置并重启服务。
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl restart docker为什么会这样
containerd 启动失败通常是因为默认配置文件未生成或 Cgroup 驱动设置不匹配。Docker 依赖 containerd 管理容器生命周期,Ubuntu 22.04 默认使用 systemd 管理服务,若 containerd 配置中 SystemdCgroup 未启用,会导致服务启动冲突或无法注册到 systemd 层级。
分步处理
按顺序执行以下步骤,每步完成后检查状态再进入下一步。
1. 检查服务状态与日志
确认 containerd 服务是否处于 failed 状态,并提取具体错误信息。
systemctl status containerd
journalctl -u containerd -n 50 `--no-pager`若日志提示 configuration error 或 failed to load config,进入下一步生成配置。
2. 生成并修正配置文件
创建配置目录并输出默认配置,需手动开启 SystemdCgroup 以匹配 Ubuntu 22.04 环境。
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml使用编辑器打开 /etc/containerd/config.toml,找到 plugins.io.containerd.grpc.v1.cri 部分,将 SystemdCgroup = false 改为 SystemdCgroup = true。
3. 重启服务
配置修改后必须重启服务才能生效,先重启 containerd 再重启 docker。
sudo systemctl daemon-reload
sudo systemctl restart containerd
sudo systemctl restart docker怎么验证是否生效
通过 Docker 客户端查询后端状态,并尝试运行容器验证全流程。
docker info | grep -i cgroup
docker run `--rm` hello-world若 docker info 输出中 Cgroup Driver 显示为 systemd,且 hello-world 容器运行成功,说明修复生效。
常见坑
- 混用安装源:同时安装 apt 源的 docker.io 和官方源的 docker-ce 会导致服务冲突,建议卸载 docker.io 后统一使用官方源。
- 配置路径错误:containerd 默认读取 /etc/containerd/config.toml,若文件放在其他路径服务无法加载。
- 忽略 daemon-reload:修改 systemd 相关配置后未执行 daemon-reload 可能导致重启命令无效。
常见问题
containerd 配置文件在哪里?
默认配置文件位于 /etc/containerd/config.toml,若该文件不存在需手动生成。
为什么要开启 SystemdCgroup?
Ubuntu 22.04 使用 systemd 管理进程,开启该选项能让容器 cgroup 层级与系统一致,避免资源管理冲突。
docker.io 和 docker-ce 有什么区别?
docker.io 是 Ubuntu 官方维护的版本,docker-ce 是 Docker 官方维护的版本,后者更新更快且兼容性更好,建议生产环境使用 docker-ce。
参考来源
- Docker 官方文档:Install Docker Engine on Ubuntu,https://docs.docker.com/engine/install/ubuntu/
- containerd 官方文档:Getting Started,https://containerd.io/