linux安装docker失败主因是源未配对、内核不支持、存储驱动异常或selinux/防火墙拦截;需依次检查官方源配置、内核版本(≥3.10)、overlay2驱动及selinux策略,并通过journalctl和systemctl定位具体错误。

Linux 上安装 Docker 卡在依赖报错或启动失败,多数不是“运气差”,而是几个关键点没对齐:源没配对、内核不支持、存储驱动异常、SELinux 或防火墙拦截。按顺序检查这四类问题,90% 的安装障碍能快速定位并解决。
依赖未满足(如 containerd.io 版本缺失)
Ubuntu 报 Depends: containerd.io (>= 1.6.4) but it is not installable,本质是系统默认源里没有新版 containerd,或者根本没加 Docker 官方源。
- 先卸载残留旧包:
sudo apt remove -y docker docker-engine docker.io containerd runc - 装基础工具并添加官方源:
sudo apt update && sudo apt install -y ca-certificates curl gnupg lsb-release,然后导入 GPG 密钥并添加仓库(Ubuntu 20.04+ 推荐用https://download.docker.com/linux/ubuntu) - 更新后明确指定安装版本(避免 apt 自动选错):
sudo apt install docker-ce=5:24.0.7-1~ubuntu.22.04~jammy docker-ce-cli=5:24.0.7-1~ubuntu.22.04~jammy containerd.io
Docker 服务启动失败(systemctl start docker 报错)
常见提示 “Unit docker.service not found” 或 “Failed with result ‘exit-code’”,说明守护进程根本没注册成功,或启动时被底层机制拦住。
- 运行
sudo systemctl status docker看是否显示masked—— 若是,执行sudo systemctl unmask docker解除屏蔽 - 检查内核版本:
uname -r,低于 3.10 必须升级;CentOS 7 建议至少 3.10.0-1160+ - 确认 overlay2 支持:
lsmod | grep overlay无输出则运行sudo modprobe overlay并写入开机加载:echo "overlay" | sudo tee -a /etc/modules-load.d/overlay.conf - 查看详细日志:
sudo journalctl -u docker -n 50 -f,重点关注 “failed to start daemon” 后的首条错误行
SELinux / 防火墙导致连接拒绝
尤其在 CentOS/RHEL 系统上,即使服务看似启动成功,docker ps 仍报 Cannot connect to the Docker daemon,大概率是 SELinux 拦截了 socket 访问。
- 临时验证:运行
sudo setenforce 0,再试docker ps—— 若恢复,说明是 SELinux 问题 - 生产环境不建议永久禁用,可改用兼容模式:编辑
/etc/docker/daemon.json,加入{"selinux-enabled": true}(需已装container-selinux包) - 检查 iptables 是否清空 Docker 规则:
sudo iptables -t nat -L | grep docker,若为空且容器无法联网,重启 Docker 后规则应自动重建
配置文件或存储驱动异常
/etc/docker/daemon.json 文件存在语法错误、挂载路径非法,或默认使用的 overlay2 驱动因磁盘损坏/权限问题初始化失败,都会让 dockerd 进程直接退出。
- 先备份并临时移走配置:
sudo mv /etc/docker/daemon.json /etc/docker/daemon.json.bak,再重启服务测试是否恢复 - 若恢复,说明原配置有误;可用
jq . /etc/docker/daemon.json.bak验证 JSON 格式,重点检查registry-mirrors、storage-driver、data-root字段值是否合法 - 若确定是 overlay2 损坏(日志含
overlay2: invalid argument),且无重要数据,可重置:sudo systemctl stop docker && sudo rm -rf /var/lib/docker/* && sudo systemctl start docker











