跳到正文

游民营地

主题: 开发运维

CentOS 8安装Docker.how to install Docker on centos8.fix error requires containerd.io 1.2.2-3

复盘 2020 年 CentOS 8 安装 Docker 时的 containerd.io 依赖与 SELinux 故障;旧系统已停止维护,当前安装应按受支持平台的官方文档。

作者 一只游民Developer and YouTuber

发布于 更新于 约 1 分钟读完

装 Docker,照着官方命令走却卡在 containerd.io?这篇保留我在 CentOS 8 初期解决依赖冲突的完整顺序:配置仓库、单独处理运行时包、安装 Engine 与 CLI,最后启动服务并检查权限。

1. 确认环境,配置 Docker 仓库

我使用的是一台新装的 CentOS 8 VPS,没有旧 Docker 包需要清理。排查安装错误前,先确认系统和架构:

cat /etc/os-release
uname -m

下面是原环境的仓库准备命令,安装所需工具后再添加 Docker 源:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

仓库设置成功不代表所有包都兼容,接下来仍要看完整依赖求解结果。旧包残留、仓库混用或 CPU 架构不一致,都可能让安装报错。

2. 处理 containerd.io 冲突,再装 CE 与 CLI

安装命令包含三个包:

sudo yum install docker-ce docker-ce-cli containerd.io

原环境在这一步提示候选 Docker 包的 containerd.io 依赖无法满足。我的处理是先到 Docker 官方包仓库找运行时包,单独安装,然后再安装剩下两个组件。

组件用途
docker-ceDocker Engine
docker-ce-cliDocker 命令行客户端
containerd.io容器运行时组件

这次使用了 CentOS 7 仓库中的 containerd.io-1.2.6-3.3.el7.x86_64.rpm。它只是那套旧环境里采用的包,不是当前最新版;更高版本号也不自动等于满足所有依赖和系统兼容条件。

# 仅记录旧环境的包来源,不用于新的生产安装
sudo dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
sudo yum install docker-ce docker-ce-cli

在旧环境复现时,也应先核对包签名、依赖及仓库配置,保留回退条件。不要从不明镜像站随便下载一个同名 RPM 强行装上。

3. 启动服务,检查版本和访问权限

安装完成后启动服务,再确认 Engine 状态:

sudo systemctl start docker
sudo systemctl enable docker.service
sudo systemctl status docker
docker --version
sudo docker images

客户端能显示版本号,不代表守护进程已经启动;用 sudo docker images 等命令确认客户端能访问服务。

我在普通用户下查询镜像时遇到权限错误,加入 docker 组并重新登录后才正常使用。这个组拥有接近主机 root 的控制能力,是否添加要先看 Docker 的权限说明。仅为安装验证,用 sudo 就可以,不需要为了少敲一个词扩大所有用户的权限。

4. 补充:容器启动的 SELinux 报错

除了安装依赖,旧环境还可能在创建容器时遇到 /proc/self/attr/keycreate: permission denied 一类运行时错误。这里要区分 Engine 安装失败与容器启动失败,两者不是同一个检查入口。

先查看 container-selinux、containerd、runc、内核版本及 SELinux 审计记录,核对是否是对应版本的已知问题。描述中的 container-selinux 2.124.0 是历史参考,不能当成所有同类报错的通用修复版本。

不建议通过关闭 SELinux 或放宽策略来换取“容器终于启动了”。如果需要修改策略,应依据实际拒绝记录评估最小变更,而不是照抄一条关闭安全机制的命令。

把报错拆到正确的层

这次安装最值得复用的是检查顺序:系统与仓库、包依赖、服务状态、用户权限,最后才是容器运行时和安全策略。包装上了但容器没起来,继续重装同一个包往往只会绕圈。

如今新项目应使用受支持系统;想了解另一类容器宿主机,也可以看Google Container-Optimized OS。欢迎分享你遇到的安装问题,注明系统、架构和完整脱敏报错,别只贴最后一行。感谢阅读,希望这份旧环境记录能帮你更快判断问题在哪一层。

后续更新

**CentOS 官方生命周期说明显示,CentOS Linux 8 已于 2021 年 12 月 31 日停止维护。不要把本文记录的旧环境与跨版本 RPM 修复用于新部署;新环境应选择受维护的系统,并按 Docker 当前安装文档核对支持平台和安装步骤。

评论

评论由 GitHub Discussions 提供。发表评论、回复或添加反应需要使用 GitHub 登录。

正在加载评论服务…

继续阅读本篇引用的笔记,补上更多背景与线索。

循着文中的引用,把相关的思路再展开一点。