在腾讯云 CVM(Ubuntu)上安装 Docker 后无法启动,通常由内核依赖缺失、配置冲突、资源限制或网络驱动问题引起。以下是系统化的排查与解决步骤:
🔍 一、确认具体错误信息
先查看 Docker 服务状态和日志,定位根本原因:
sudo systemctl status docker
sudo journalctl -u docker --no-pager -n 50
常见报错示例:
failed to start daemon: error while creating /var/run/docker.piderror during connect: Get "http://unix:///var/run/docker.sock": ... dial unix ... no such file or directorykernel version too old或cgroup v2 not supported
🛠️ 二、针对性解决方案
✅ 1. 检查并修复内核模块依赖(最常见)
Docker 依赖 overlay2 存储驱动,需确保内核支持且模块已加载:
# 检查是否加载了必要模块
lsmod | grep -E 'overlay|br_netfilter|iptable_filter'
# 若未加载,手动加载(临时)
sudo modprobe overlay
sudo modprobe br_netfilter
sudo modprobe iptable_filter
# 永久加载(推荐)
echo "overlay" | sudo tee -a /etc/modules-load.d/docker.conf
echo "br_netfilter" | sudo tee -a /etc/modules-load.d/docker.conf
echo "iptable_filter" | sudo tee -a /etc/modules-load.d/docker.conf
💡 注意:部分旧版 Ubuntu(如 18.04 LTS)默认未开启
overlay2,建议升级内核至linux-image-generic-hwe-xxx或使用ubuntu-pro启用安全更新。
✅ 2. 检查 cgroup 驱动兼容性
Docker 默认使用 systemd 作为 cgroup 驱动,但若 systemd 未正确初始化可能失败:
# 查看当前 cgroup 驱动
docker info | grep "Cgroup Driver"
# 若显示 "unknown" 或报错,尝试强制指定为 systemd:
sudo mkdir -p /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-level": "info"
}
EOF
# 重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
⚠️ 若使用 cgroup v2(Ubuntu 22.04+ 默认),需额外设置:
# 编辑 /etc/default/grub,添加: GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=1" sudo update-grub && sudo reboot
✅ 3. 清理残留进程与文件
有时 Docker 异常退出导致 PID 文件或 socket 残留:
# 停止所有相关进程
sudo pkill dockerd
sudo pkill containerd
# 清理关键路径
sudo rm -f /var/run/docker.pid
sudo rm -rf /var/lib/docker/* # ⚠️ 谨慎!会删除所有镜像/容器数据!
# 仅保留配置目录更安全:
# sudo rm -rf /var/lib/docker/{containerd,images,containers,volumes} # 按需操作
然后重新初始化:
sudo systemctl start docker
sudo systemctl enable docker
✅ 4. 检查腾讯云 CVM 特有限制
-
安全组规则:确保本地端口(如 2375/2376)未被防火墙拦截(通常不影响本地启动,但影响远程连接)。
-
磁盘空间不足:
df -h /var/lib/docker若
/var分区满,Docker 无法写入 PID 文件或镜像层。 -
SELinux/AppArmor(较少见):
sudo aa-status # Ubuntu 默认用 AppArmor # 若报错,可临时测试: sudo aa-complain /usr/bin/dockerd
✅ 5. 重装 Docker(终极方案)
若以上无效,彻底重装:
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 清理残留
sudo rm -rf /var/lib/docker /etc/docker
# 按官方指南重新安装(以 Ubuntu 22.04 为例)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 验证
sudo systemctl status docker
docker run hello-world
📌 预防建议
- 优先使用 Docker 官方仓库 安装,避免
apt install docker.io(包较旧)。 - 定期更新内核:
sudo apt update && sudo apt upgrade linux-image-generic - 在腾讯云控制台开启 自动安全补丁(通过
ubuntu-advantage)。
如果仍无法解决,请提供:
sudo systemctl status docker的完整输出docker info中的Cgroup Driver和Kernel Version字段- 你的 Ubuntu 版本(
lsb_release -a)
我可进一步精准诊断!
PHPWP博客