Skip to content

Docker Install 在 OpenEuler 环境

Docker 官方文档: https://docs.docker.com/install/linux/docker-ce/centos/

DNF 和 YUM 包管理器

DNF 是对 YUM 的改写,虽然您可能会看到 YUM 在旧系统上使用,但它已停止使用,取而代之的是 DNF。现在没有太多理由去再探索 YUM。

dnf 添加源 repo

bash
# dnf 添加源 repo
[root@hecs-366183 ~]# dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

# 查询 repo
[root@hecs-366183 ~]# dnf repolist -v
Loaded plugins: builddep, changelog, config-manager, copr, debug, debuginfo-install, download, generate_completion_cache, groups-manager, needs-restarting, playground, repoclosure, repodiff, repograph, repomanage, reposync
DNF version: 4.10.0
cachedir: /var/cache/dnf
Docker CE Stable - x86_64                                                                                 269  B/s | 385  B     00:01
Errors during downloading metadata for repository 'docker-ce-stable':
  - Status code: 404 for https://download.docker.com/linux/centos/2.0/x86_64/stable/repodata/repomd.xml (IP: 13.32.50.74)
Error: Failed to download metadata for repo 'docker-ce-stable': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
[root@hecs-366183 ~]#

发现报错了, 报 404 找不到这个地址:https://download.docker.com/linux/centos/2.0/x86_64/stable/repodata/repomd.xml

问题原因

第三方 YUM 源仅适配 CentOS 7 发行版,OpenEuler、Alibaba Cloud Linux 2 等操作系统与 CentOS 7 操作系统的 $releasever 值不同,导致 dnf 解析后的地址无效,从而下载容器软件包失败。

dnf 安装 docker-ce 软件包时,首先会在系统中获取版本号,即$releasever 值,然后替换相应 YUM 源中 baseurl 地址对应的$releasever 变量,dnf 从替换后的 baseurl 地址中获取相关数据。

由于 CentOS 7 操作系统的 $releasever 值为 7,Alibaba Cloud Linux 2 操作系统的 $releasever 值为 2.0,因此解析后的 baseurl 地址并非预期地址,dnf 便无法从这个错误的地址中获取数据。

解决方案

shell
vi /etc/yum.repos.d/docker-ce.repo

按 i 键切换至编辑模式,找到 docker-ce.repo 文件中所有 enabled=1 值的源,将源中 baseurl 地址的$releasever 变量修改为 7,修改之后的内容如下所示(注意和注释掉的 baseurl 不同的地方)。

shell
[docker-ce-stable]
name=Docker CE Stable - $basearch
# baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
baseurl=https://download.docker.com/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

修改完成后,按下 Esc 键后,输入:wq 并回车以保存并关闭配置文件,重新安装软件包即可。

shell
# 列出所有可用的docker-ce软件包
dnf list docker-ce --showduplicates | sort -r

dnf makecache

# --nobest 筛选出最终符合要求的包来安装。不加 --nobest 可能会出错
dnf install --nobest docker-ce -y

# 2. Start Docker
systemctl start docker

# 3. 开机自动启动
systemctl enable docker

# 配置镜像加速器
# 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
# 并且配置k8s运行要求docker的--cgroup-driver=systemd
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://bfflggen.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

systemctl daemon-reload

systemctl restart docker

# Uninstall Docker CE
dnf remove docker-ce