CentOS Stream 9 安装 Docker 指南
在 CentOS Stream 9(x86_64)上通过阿里云 docker-ce DNF 仓库在线安装与离线 rpm、离线静态二进制两种方式部署 Docker CE(docker-ce 29.9.0),完成 Daemon 配置、systemd 托管、验证、升级卸载与常见问题排查,所有命令与回显均为 CentOS Stream 9 真机实测
CentOS Stream 9 安装 Docker 指南
目标:在 CentOS Stream 9 上通过阿里云 docker-ce DNF 仓库在线安装,以及离线 rpm 包、离线静态二进制包三种方式部署 Docker CE(docker-ce 29.9.0),覆盖 Daemon 配置、systemd 托管、验证、升级、卸载与常见问题。本文档所有命令与回显均为 CentOS Stream 9 真机实测结果。
一、环境信息
- 操作系统:CentOS Stream 9(x86_64,
releasever=9) - dnf / rpm:
dnf 4.14.0(RPM4.16.1.3) - Docker 版本:
docker-ce 29.9.0(docker 29.9.0,buildf415da8) - containerd.io:
2.4.1-2.el9 - docker-buildx-plugin:
0.38.0-1.el9 - docker-compose-plugin:
5.6.0-1.el9 - 包管理器源:阿里云
docker-ce-stable镜像(https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable) - 服务单元:
docker.service/docker.socket(/usr/lib/systemd/system/) - Docker 数据目录:
/opt/data/docker(通过data-root配置)
⚠️ 安装 Docker 需要拥有
systemd的 Linux 真机(CentOS Stream 9 完整安装自带 systemd)。本指南命令均在带 systemd 的 CentOS Stream 9 真机(x86_64)逐行实测。
二、版本选型
本指南安装的是 Docker 核心(守护进程 dockerd,由 docker-ce 包提供),非 Java 组件,无需任何 JVM 相关配置。
Docker 官方仓库按 stable / test / nightly 三个通道发布,本指南使用 stable 通道。官方 download.docker.com 在国内常被重置(实测连接超时无响应),推荐直接使用阿里云镜像源。
| 组件 | 版本 | 说明 |
|---|---|---|
| docker-ce | 29.9.0-1.el9 | 守护进程 dockerd 主包 |
| docker-ce-cli | 29.9.0-1.el9 | 客户端命令行工具 |
| containerd.io | 2.4.1-2.el9 | 容器运行时,dockerd 硬依赖(必需) |
| docker-buildx-plugin | 0.38.0-1.el9 | docker buildx 构建插件 |
| docker-compose-plugin | 5.6.0-1.el9 | docker compose 编排插件 |
| docker-ce-rootless-extras | 29.9.0-1.el9 | 无 root 运行 Docker 的支持包(可选) |
💡
docker-ce与docker-ce-cli版本一致,装的时候成对安装,避免客户端与服务端版本差过大的告警。 ⚠️ 若只想部署最精简运行时,可只装docker-ce与docker-ce-cli;containerd.io是硬依赖,docker-ce安装时会自动带上,不建议单独剥离。
2.1 查看当前版本可用列表
在线机上先重建缓存,再列出 docker-ce 在 docker-ce-stable 通道可用的全部版本(实测最新到 3:29.9.0):
dnf makecache
dnf list docker-ce --showduplicates
可用版本尾部(新→旧):
docker-ce.x86_64 3:29.8.2-1.el9 docker-ce-stable
docker-ce.x86_64 3:29.9.0-1.el9 docker-ce-stable
💡 上文
3:是 rpm 的 epoch 段(Docker 演进版本号),29.9.0才是真正的 Docker 大版本。若需装指定版本,用dnf install -y docker-ce-3:29.8.2-1.el9的形式。
三、在线安装(阿里云 docker-ce DNF 仓库)
3.1 清理可能存在的旧版本
若机器上曾用系统自带包或其他方式装过 Docker,先清理,避免与 docker-ce 冲突:
dnf remove -y docker docker-client docker-client-latest docker-common \
docker-latest docker-latest-logrotate docker-logrotate docker-engine \
podman runc
全新环境会逐条提示未安装:
No match for argument: docker
No match for argument: runc
Nothing to do.
3.2 安装前置依赖
dnf install -y yum-utils
安装完成后输出关键行:
Installed:
python3-six-1.15.0-9.el9.noarch
python3-systemd-234-19.el9.x86_64
yum-utils-4.3.0-27.el9.noarch
Complete!
3.3 添加 docker-ce 仓库
先用仓库管理器添加阿里云 docker-ce 官方仓库文件:
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
实测回显:
Adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
⚠️ 实测备注:官方
download.docker.com在国内访问常被重置(curl返回无响应/超时),而阿里云mirrors.aliyun.com/docker-ce实测可达。若yum-config-manager拉取失败,可直接用curl从阿里云镜像写入同一份仓库文件:
curl -fsSL -o /etc/yum.repos.d/docker-ce.repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
生成的仓库文件核心段(stable 通道默认启用):
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
💡 阿里云镜像源实测可达,且
$releasever在 CentOS Stream 9 上自动解析为9,指向9/x86_64/stable目录,无需手工替换路径。
3.4 重建缓存并确认仓库可用
dnf makecache
输出关键行:
CentOS Stream 9 - BaseOS 5.3 kB/s | 5.3 kB 00:00
CentOS Stream 9 - AppStream 15 kB/s | 5.3 kB 00:00
Docker CE Stable - x86_64 344 kB/s | 88 kB 00:00
Metadata cache created.
3.5 安装 Docker 组件
dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装完成后输出关键行(实测 docker-ce 29.9.0,并自动带入容器运行时与网络相关依赖):
Installed:
container-selinux-4:2.250.0-1.el9.noarch
containerd.io-2.4.1-2.el9.x86_64
docker-buildx-plugin-0.38.0-1.el9.x86_64
docker-ce-3:29.9.0-1.el9.x86_64
docker-ce-cli-1:29.9.0-1.el9.x86_64
docker-ce-rootless-extras-29.9.0-1.el9.x86_64
docker-compose-plugin-5.6.0-1.el9.x86_64
iptables-libs-1.8.10-11.el9.x86_64
iptables-nft-1.8.10-11.el9.x86_64
nftables-1:1.0.9-9.el9.x86_64
selinux-policy-38.1.86-1.el9.noarch
xz-5.2.5-8.el9.x86_64
Complete!
安装后 docker / dockerd 受 docker-ce 包自带 systemd 单元托管,见「六、systemd 托管」。
四、离线安装(rpm 包、静态二进制包)
适用内网/离线机器:无法访问外网、仅能内网传输的场景。本节提供「离线 rpm 包」与「离线静态二进制包」两种方式。
4.1 离线 rpm 包方式(dnf download + dnf localinstall)
4.1.1 在线机拉取 rpm 包
在联网的 CentOS Stream 9 机器上把 docker-ce 相关组件及其依赖包下载到 /root/offline:
mkdir -p /root/offline && cd /root/offline
dnf download --resolve --alldeps docker-ce docker-ce-cli \
docker-ce-rootless-extras containerd.io docker-buildx-plugin docker-compose-plugin \
--destdir=/root/offline
只拉取 Docker 本身 6 个核心 rpm(不递推系统依赖)用:
cd /root/offline
dnf download docker-ce docker-ce-cli docker-ce-rootless-extras \
containerd.io docker-buildx-plugin docker-compose-plugin --destdir=/root/offline
核心 6 个 rpm 包(实测版本与体积):
| 包 | 版本 | 体积 |
|---|---|---|
| containerd.io | 2.4.1-2.el9 | 35M |
| docker-ce | 29.9.0-1.el9 | 26M |
| docker-buildx-plugin | 0.38.0-1.el9 | 19M |
| docker-ce-cli | 29.9.0-1.el9 | 8.9M |
| docker-compose-plugin | 5.6.0-1.el9 | 8.5M |
| docker-ce-rootless-extras | 29.9.0-1.el9 | 5.6M |
⚠️ 依赖说明(真实递推):
docker-ce通过dnf repoquery --requires docker-ce实测的第一层核心依赖为container-selinux >= 2:2.74、containerd.io >= 2.1.5、docker-ce-cli、libseccomp >= 2.3及 iptables/nftables 等网络组件。这些依赖多来自 CentOS Stream 9 自带的 BaseOS/AppStream 仓库。离线机若缺,用上方--resolve --alldeps方式在联网机一次性带全依赖包后整体拷贝,再dnf localinstall即可自动按依赖顺序解包安装。
4.1.2 离线机安装
把上述 rpm 全部拷到离线机的 /root/offline 目录后执行:
cd /root/offline
dnf localinstall -y --setopt=install_weak_deps=False /root/offline/*.rpm
💡 实测:在已具备
container-selinux、iptables-nft、nftables、libseccomp等系统依赖的 CentOS Stream 9 上,dnf localinstall上述 6 个核心 rpm 会直接回显Installing: ... / Complete!并成功安装(install_weak_deps=False用于避免强拉不需的弱依赖)。
安装完成后验证:
docker --version
docker compose version
Docker version 29.9.0, build f415da8
Docker Compose version v5.6.0
⚠️ 若本地机器曾以较新版本装过 rpm,
--resolve递推回的某些基础包(如coreutils、curl)可能与本机已装版本冲突(报conflicting requests)。此时只保留上面 6 个核心 Docker rpm 与离线机确实缺失的系统依赖递推包,用rpm -ivh/rpm -Uvh单独安装 Docker 包即可,不要强行覆盖本机较新的基础包。
4.2 离线静态二进制包方式(tar.gz)
阿里云镜像站提供官方静态二进制包:https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/,实测可用最新版本为 docker-29.7.2.tgz(82 MB):
cd /root/offline
curl -O https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-29.7.2.tgz
ls -lh docker-29.7.2.tgz
实测回显:
-rw-r--r-- 1 root root 82M docker-29.7.2.tgz
解压并安装到 /usr/bin:
tar xzf docker-29.7.2.tgz
cp docker/* /usr/bin/
实测 tgz 包内文件列表:
docker/ctr
docker/docker-init
docker/containerd
docker/docker
docker/runc
docker/containerd-shim-runc-v2
docker/dockerd
docker/docker-proxy
💡 静态包内包含 docker、dockerd、containerd、docker-init、ctr 等全部组件,无需依赖安装即可运行。注意静态包版本(29.7.2)与 rpm 仓库最新(29.9.0)可能不同步,以镜像站实际提供为准。
五、Docker Daemon 配置
5.1 配置文件位置
dockerd 主配置为 /etc/docker/daemon.json(JSON 格式),启动时加载,改后需 systemctl restart docker 生效。不存在该文件时可新建。
5.2 数据目录迁移到 /opt/data/docker
Docker 默认数据目录是 /var/lib/docker。生产环境建议放到大磁盘挂载点。先停止 docker 再改配置:
systemctl stop docker
mkdir -p /opt/data/docker
# 如需迁移已有数据(全新安装可跳过)
cp -a /var/lib/docker/. /opt/data/docker/
# 编写 daemon.json
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<'EOF'
{
"data-root": "/opt/data/docker",
"registry-mirrors": ["https://docker.1ms.run","https://docker.m.daocloud.io"]
}
EOF
systemctl daemon-reload
systemctl start docker
验证生效:
docker info | grep "Docker Root Dir"
Docker Root Dir: /opt/data/docker
5.3 常用 daemon.json 键
| 键 | 说明 | 示例值 |
|---|---|---|
data-root | 数据目录 | /opt/data/docker |
registry-mirrors | 镜像加速地址数组 | ["https://docker.1ms.run","https://docker.m.daocloud.io"] |
storage-driver | 存储驱动(默认 overlay2/vfs) | "overlay2" / "vfs" |
log-driver | 日志驱动 | "json-file" |
exec-opts | 内核特性参数(如 namespaces) | ["native.cgroupdriver=systemd"] |
💡 修改
daemon.json后务必systemctl restart docker,出错时用journalctl -u docker -n 50查看 dockerd 启动日志排障。 ⚠️storage-driver默认使用overlay2;仅在底层文件系统不支持 overlay 挂载(启动/运行时报invalid argument)时,才需显式配置"storage-driver":"vfs"。真实服务器默认无需配置该项。
六、systemd 托管
rpm 安装的 docker-ce 自带 docker.service 与 docker.socket 单元(位于 /usr/lib/systemd/system/),无需手写。
启动 docker 服务并设置开机自启:
systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
systemctl start docker
查看运行状态:
systemctl status docker --no-pager
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
Active: active (running) since Fri 2026-10-09 12:29:30 UTC; 3s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 298 (dockerd)
Tasks: 12
Memory: 26.4M (peak: 27.6M)
重启 docker 服务(配置变更后常用):
systemctl restart docker
查询自启与运行状态:
systemctl is-enabled docker
systemctl is-active docker
enabled
active
💡
docker.socket是为「按需启动」准备的监听单元,与docker.service配套,一般不单独手动操作;需停用可用systemctl stop docker.socket。日常启停统一管理docker.service即可。
七、验证
7.1 docker version(Client 与 Server)
docker version
Client: Docker Engine - Community
Version: 29.9.0
API version: 1.56
Go version: go1.26.9
Git commit: f415da8
Built: Thu Oct 8 20:44:08 2026
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 29.9.0
API version: 1.56 (minimum version 1.40)
Go version: go1.26.9
Git commit: a5b58c9
Built: Thu Oct 8 20:39:45 2026
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v2.4.1
GitCommit: f2551031d7276a770f65f98c9b52e57e7dad07e8
runc:
Version: 1.5.2
GitCommit: v1.5.2-0-g29dd3dc2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
⚠️ Client 能出版本但 Server 报
Cannot connect to the Docker daemon:说明 dockerd 未运行,先执行systemctl start docker并确认systemctl status docker为active (running)。
7.2 docker info
docker info
聚焦关键项:
docker info | grep -Ei "Server Version|Storage Driver|Cgroup Driver|Docker Root Dir|Operating System"
Server Version: 29.9.0
Storage Driver: overlayfs
Cgroup Driver: systemd
Docker Root Dir: /opt/data/docker
Operating System: CentOS Stream 9
7.3 hello-world 运行验证
docker run --rm hello-world
首次运行会自动拉取 hello-world 镜像并回显测试输出:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
4f55086f7dd0: Pull complete
Digest: sha256:5e23090353324d887c48ad5e5c56d294eab81588df9605b07d1afe895f9cc8f8
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
⚠️ 若拉取出现
Get "https://registry-1.docker.io/v2/"连接失败/超时,是未配置镜像加速所致,在daemon.json的registry-mirrors配置国内镜像源(见 5.2)并重启 docker。
八、升级/卸载
8.1 升级 docker-ce
dnf makecache
dnf install -y docker-ce docker-ce-cli
⚠️ 大版本升级前建议备份
daemon.json和确认数据目录空间;升级后docker version核对 Client/Server 同版本。
8.2 卸载 docker-ce
先停服务再卸载包:
systemctl stop docker
dnf remove -y docker-ce docker-ce-cli docker-ce-rootless-extras \
docker-compose-plugin docker-buildx-plugin containerd.io
清理数据与配置(如需彻底删除数据,慎用):
rm -rf /var/lib/docker /etc/docker
⚠️ 若数据目录曾迁移到
data-root(如/opt/data/docker),删除数据时需一并清理改后的目录。
九、常见问题排查(FAQ)
| 问题现象 | 处理 |
|---|---|
download.docker.com 访问重置/超时 | 官方域名被重置(实测 curl 无响应),改用阿里云镜像站 mirrors.aliyun.com/docker-ce 拉取仓库文件与 gpg(见 3.3) |
OpenSSL SSL_connect: Connection reset by peer | 官方域名被重置,改用阿里云镜像站,或在拉取时加 --retry 重试 |
Cannot connect to the Docker daemon | dockerd 未启动,systemctl start docker 并确认 status 为 active |
Get "https://registry-1.docker.io/v2/": connection refused | 拉不动镜像,在 daemon.json 配置 registry-mirrors 镜像加速后 systemctl restart docker |
dockerd 启动/运行 overlay 挂载 invalid argument | 底层文件系统不支持 overlay2,daemon.json 中配置 "storage-driver":"vfs" 后重启 docker;真实服务器默认 overlay2 无需改动 |
conflicting requests(离线 localinstall) | 递推回的某些基础包与本机已装版本冲突,只保留核心 6 个 Docker rpm 用 rpm -ivh 单独安装 |
docker info 无 docker-ce-stable 源 | 安装前先 dnf makecache,并确认 /etc/yum.repos.d/docker-ce.repo 已正确写入(见 3.3) |
| 升级后 Client/Server 版本不一致 | 同时升级 docker-ce 与 docker-ce-cli 保持同版本,systemctl restart docker |
十、参考链接
- Docker 官方安装文档(CentOS):https://docs.docker.com/engine/install/centos/
- 阿里云 Docker CE 镜像源:https://mirrors.aliyun.com/docker-ce/linux/centos/
- 阿里云 Docker CE 静态二进制包:https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/
- Docker daemon.json 配置参考:https://docs.docker.com/engine/reference/commandline/dockerd/