这个问题在云环境里其实挺常见的,尤其是刚接触 Linux 或者从其他发行版(比如 CentOS)转过来用 Ubuntu 的时候。
首先得明确一点:“无法启动”通常不是 Docker 本身坏了,而是 systemd 服务挂了、权限不对,或者是底层依赖冲突。 京东云的 Ubuntu 镜像本身是标准的 Canonical 官方镜像,跟阿里云、腾讯云的 Ubuntu 20.04/22.04 内核差异不大,所以排查思路是通用的。
别慌,按下面这个流程一步步来,90% 的问题都能解决。
第一步:先看日志,别瞎猜
很多新手一看到 systemctl start docker 报错就直接重启服务器,这是大忌。Docker 的失败原因都写在日志里。
执行以下命令查看具体错误信息:
# 查看 Docker 服务的详细状态
sudo systemctl status docker
# 或者查看最近的系统日志中关于 dockerd 的记录
sudo journalctl -xeu docker.service
重点看最后几行红色的 Error 或 Warning。 常见的几种情况对应不同的解法:
- Job for docker.service failed because the control process exited with error code.
- 这通常是配置文件语法错误或驱动问题。
- Failed to start Docker Application Container Engine.
- 可能是端口冲突或存储驱动未初始化。
- Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
- 这说明服务根本没起来,或者你当前用户没权限操作。
第二步:最常见的原因及解决方案
1. 存储驱动冲突(Overlay2 vs Devicemapper)
Ubuntu 默认使用 overlay2 存储驱动。如果你的内核版本较老,或者文件系统不支持,可能会报错。
-
检查方法:
sudo cat /etc/docker/daemon.json如果里面有配置了
storage-driver: "devicemapper"之类的旧配置,删掉它,让 Docker 自动选择默认的overlay2。 -
修复步骤:
删除旧的容器数据(注意:这会清除所有容器和数据,生产环境请备份!):sudo rm -rf /var/lib/docker sudo systemctl restart docker
2. 内核模块缺失(特别是 cgroup 相关)
Ubuntu 20.04+ 默认启用了 cgroup v2,而某些旧版本的 Docker 或特定镜像可能不兼容。
-
检查方法:
stat -fc %T /sys/fs/cgroup如果输出是
cgroup2fs,说明是 cgroup v2。 -
解决方案:
确保你的 Docker 版本 >= 20.10。如果是通过 apt 安装的,建议升级到最新版:sudo apt update sudo apt install --reinstall docker-ce docker-ce-cli containerd.io
3. 端口或 Socket 权限问题
有时候 Docker 启动了,但你用普通用户执行 docker ps 报错 permission denied。
- 解决方法:
将当前用户加入 docker 组:sudo usermod -aG docker $USER # 然后重新登录终端或执行 newgrp docker
4. 京东云安全组/防火墙干扰(较少见但存在)
虽然 Docker 主要监听本地 socket,但如果你配置了 bridge 网络并映射了端口,需要确保京东云控制台的安全组放行了相应端口。不过,如果连 systemctl start docker 都失败,那跟安全组无关,是本地服务问题。
第三步:终极重装法(干净利落)
如果上面的方法都不行,或者你根本不知道改了什么配置导致服务起不来,最推荐的做法是直接卸载重装。这不是偷懒,而是最快恢复标准状态的方式。
⚠️ 警告:此操作会删除所有现有容器、镜像和卷!务必先备份重要数据!
# 1. 停止并移除 Docker
sudo systemctl stop docker
sudo systemctl disable docker
# 2. 卸载 Docker 包(保留仓库源,方便后续安装)
sudo apt-get purge -y docker-engine docker docker.io docker-ce docker-ce-cli containerd.io
# 3. 清理残留文件(关键步骤!很多人只卸载包不清理数据)
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
# 4. 重新安装 Docker(使用官方脚本或 apt)
# 推荐使用官方一键脚本,省心且适配最新内核
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 5. 启动并设置开机自启
sudo systemctl enable docker
sudo systemctl start docker
# 6. 验证
sudo docker run hello-world
为什么推荐用 Aliyun 镜像源?
国内网络环境下,直接拉取 Docker Hub 的镜像极慢甚至超时。在安装时指定--mirror Aliyun可以大幅提升速度。
第四步:避坑指南(针对京东云用户)
-
不要用 snap 安装 Docker
有些教程会让你用sudo snap install docker。千万别这么干! Snap 包裹的 Docker 在 systemd 集成、权限管理和性能上都有问题,尤其在云服务器上容易出各种玄学 bug。一定要用 apt 或官方脚本安装。 -
检查磁盘空间
京东云的 ECS 实例默认根分区可能不大。如果/var/lib/docker所在的分区满了,Docker 也会启动失败。df -h /var/lib/docker如果可用空间为 0%,清理一下无用镜像:
sudo docker system prune -a -
内核版本过低
如果你用的是很老的 Ubuntu 16.04 或 18.04,且内核没有更新到 HWE (Hardware Enablement) 版本,可能会缺少必要的内核模块。建议升级到最新的 LTS 版本(如 22.04 或 24.04)。
总结
遇到 Docker 无法启动,先看 journalctl 日志,再查存储驱动和权限,最后考虑重装。
对于京东云用户,只要遵循“不用 snap、定期清理磁盘、保持内核更新”这三点,基本不会有大问题。如果还是搞不定,把 journalctl -xeu docker.service 的输出贴出来,大家才能帮你精准定位。
云技术博客