在符合如下条件的Alibaba Cloud Linux 3实例中,使用适配CentOS 8中的第三方DNF(YUM)源,执行dnf install docker-ce
命令安装容器软件包失败,并出现如下报错。
Docker CE Stable - x86_64
Failed to download metadata for repo 'docker-ce-stable'
Error: Failed to download metadata for repo 'docker-ce-stable'
问题原因
第三方DNF源仅适配CentOS 8发行版,而在Alibaba Cloud Linux 3中,系统的releasever值与CentOS 8不同,导致DNF解析后的地址无效,从而下载RPM包失败。DNF安装docker-ce时,首先会从系统中获取版本号,即releasever值,然后替换掉相应源baseurl中对应的$releasever变量,之后DNF从替换后的baseurl中获取相关数据。由于CentOS 8的releasever值为8,而Alibaba Cloud Linux 3系统的releasever值为3,因此解析后的baseurl并非预期地址,DNF便无法从这个错误的地址中安装软件包。
阿里云提醒您:
- 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
- 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
- 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
本文以docker-ce源为例进行介绍,如果您使用的是其他DNF源,解决方法类似。
/etc/yum.repos.d/docker-ce.repo
文件,找到docker-ce.repo文件中所有存在enabled=1值的源,将源中baseurl的$releasever变量替换为8。通过安装dnf-plugin-releasever-adapter插件实现releasever的自动转换,即将3转换为8。dnf-plugin-releasever-adapter插件目前的版本及默认支持的第三方repo如下表所示:
插件版本 | 默认支持的第三方repo | 插件的限制 |
---|---|---|
1.0-1.3 | docker-ce.repo,epel.repo |
您需要满足以下条件,才可以使用该插件:
|
dnf install dnf-plugin-releasever-adapter --repo alinux3-plus
/etc/yum/pluginconf.d/
目录,编辑releasever-adapter.conf配置文件。如果需要添加其他的DNF源,则需要将DNF源的.repo文件名添加在include字段后面,并以逗号隔开。
说明:DNF源的.repo文件一般在/etc/yum.repos.d/
目录下查看。
cd /etc/yum/pluginconf.d/系统显示类似如下。
vim releasever-adapter.conf
[main]
enabled=1
[releasevermapping]
release_dict={'2.1903' : '7', '3' : '8'}
[reposlist]
include=docker-ce.repo, epel.repo
说明:
- 文件中参数的具体介绍如下所示:
- [main]:此部分为插件的主要控制部分,控制插件的启用与否,其中enabled=1表示启用插件,enabled=0表示停用插件。
- [releasevermapping]:此部分为待处理的releasever的映射关系,其中2.1903映射为7,3映射为8。
- [repolist]:此部分为需要修改的源的列表,如果需要添加其他的源,则需要将.repo文件的名字添加在include字段后面,并以逗号隔开。
- 一般来说,一个.repo文件中有多个可以使用的源,每个源都有一个独立的名称区分其他的源,一个系统中不能出现重复的名称,例如:docker-ce.repo中有[docker-ce-stable]和[docker-ce-stable-debuginfo]等源。
- 请务必保证新添加到releasever-adapter.conf配置文件中的源文件名字是源文件内各个源名称的前缀,例如:docker-ce.repo源文件中包含的docker-ce-stable和docker-ce-stable-debuginfo两个源名称,均以docker-ce 为前缀。
说明:您也可以尝试安装其他软件。
dnf install docker-ce