必须用阿里云源并严格对齐版本:先确认系统为CentOS 8/Stream,清除旧Docker,安装yum-utils等依赖;添加并修正docker-ce.repo指向阿里云;指定安装docker-ce-24.0.7、docker-ce-cli-24.0.7、containerd.io-1.7.20;配置daemon.json启用systemd cgroup驱动后重启docker服务。

docker-ce 最新版在 CentOS 8/Stream 上能直接装,但必须用正确的源和依赖组合,否则会卡在 containerd.io 版本冲突或 GPG 验证失败。
确认系统版本和基础依赖
先跑这三条命令,别跳过:
-
cat /etc/redhat-release—— 必须看到CentOS Linux release 8.或CentOS Stream release 8,CentOS 7不适用本文方法(内核和仓库结构不同) -
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-logrotate docker-engine—— 旧包残留会导致docker version报command not found或启动失败 -
sudo yum install -y yum-utils device-mapper-persistent-data lvm2—— 尤其device-mapper-persistent-data缺失时,dockerd启动会报failed to start daemon: error initializing graphdriver: devicemapper: devicemapper not supported
用阿里云源装最新 docker-ce
官方源(download.docker.com)在国内基本超时或 404,直接换阿里云镜像源,并修正 repo 文件里的路径:
- 执行:
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo - 再补一句:
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo—— 不做这步,yum makecache仍会去连国外域名 -
sudo yum makecache成功后,运行yum list docker-ce --showduplicates | head -5,能看到类似docker-ce.x86_64 3:24.0.7-3.el8这样的条目,说明源已生效
docker-ce、docker-ce-cli、containerd.io 版本必须严格对齐
这是最容易出错的环节:yum 默认安装的 containerd.io 可能是旧版(比如 1.6.x),而新 docker-ce(24.x)要求 containerd.io >= 1.7.0,否则 systemctl start docker 直接失败,日志里出现 failed to load plugin io.containerd.snapshotter.v1.overlayfs
- 正确做法是:一次性指定全部组件版本,例如:
yum install -y docker-ce-24.0.7 docker-ce-cli-24.0.7 containerd.io-1.7.20 - 不推荐只写
yum install -y docker-ce—— 它会自动拉一个“最新”containerd.io,但那个“最新”未必匹配当前docker-ce - 查可用版本用:
yum list available containerd.io --showduplicates | grep el8,选和docker-ce小版本号一致的(如 24.0.x 对应 containerd.io 1.7.x)
启动前必须配置 /etc/docker/daemon.json
CentOS 8 默认 SELinux 开启、firewalld 活跃,不配 daemon.json,docker run hello-world 很可能卡住或报 permission denied while trying to connect to the Docker daemon socket
- 创建文件:
sudo mkdir -p /etc/docker && sudo tee /etc/docker/daemon.json写入:
{
"log-driver": "journald",
"registry-mirrors": ["https://kzu8idmi.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
sudo systemctl daemon-reload && sudo systemctl restart docker —— 注意不是 systemctl restart docker.service,后者在 CentOS 8 上无效sudo docker info | grep "Cgroup Driver" 应输出 systemd;sudo docker run --rm hello-world 能打印欢迎信息才算真正跑通daemon.json 里那行 "exec-opts": ["native.cgroupdriver=systemd"] 是 CentOS 8 的刚需,漏掉它,Kubernetes 或 Podman 共存时几乎必出问题。


















