努力
加油

京东云Ubuntu镜像安装Docker后无法启动怎么办?

这个问题在云环境里其实挺常见的,尤其是刚接触 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。 常见的几种情况对应不同的解法:

  1. Job for docker.service failed because the control process exited with error code.
    • 这通常是配置文件语法错误或驱动问题。
  2. Failed to start Docker Application Container Engine.
    • 可能是端口冲突或存储驱动未初始化。
  3. 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 可以大幅提升速度。


第四步:避坑指南(针对京东云用户)

  1. 不要用 snap 安装 Docker
    有些教程会让你用 sudo snap install docker。千万别这么干! Snap 包裹的 Docker 在 systemd 集成、权限管理和性能上都有问题,尤其在云服务器上容易出各种玄学 bug。一定要用 apt 或官方脚本安装。

  2. 检查磁盘空间
    京东云的 ECS 实例默认根分区可能不大。如果 /var/lib/docker 所在的分区满了,Docker 也会启动失败。

    df -h /var/lib/docker

    如果可用空间为 0%,清理一下无用镜像:

    sudo docker system prune -a
  3. 内核版本过低
    如果你用的是很老的 Ubuntu 16.04 或 18.04,且内核没有更新到 HWE (Hardware Enablement) 版本,可能会缺少必要的内核模块。建议升级到最新的 LTS 版本(如 22.04 或 24.04)。


总结

遇到 Docker 无法启动,先看 journalctl 日志,再查存储驱动和权限,最后考虑重装。

对于京东云用户,只要遵循“不用 snap、定期清理磁盘、保持内核更新”这三点,基本不会有大问题。如果还是搞不定,把 journalctl -xeu docker.service 的输出贴出来,大家才能帮你精准定位。