206
云计算
负载均衡
产品简介
产品价格
快速入门
用户指南
实践操作
常见问题
购买指南
云服务器
产品简介
计费规则
购买指导
控制台使用指南
常见问题
云数据库
产品简介
计费规则
购买指导
快速入门
连接实例
控制台使用指南
对象存储
产品简介
控制台使用指南
程序员百科
Python
在Alibaba Cloud Linux 3系统的ECS实例中,使用docker-ce、epel等第三方DNF(YUM)源安装软件失败怎么办?

产品推荐:

1、安全稳定的云服务器租用,2核/2G/5M仅37元,点击抢购>>>

2、高防物理服务器20核/16G/50M/500G防御仅350元,点击抢购>>>

3、百度智能建站(五合一网站)仅880元/年,点击抢购>>> 模板建站(PC+手机站)仅480元/年,点击抢购>>>

4、阿里云服务器2核2G3M仅99元/年、2核4G5M仅199元/年,新老同享,点击抢购>>> 

5、腾讯云服务器2核2G4M仅99元/年、新老同享,点击抢购>>>   


点击这里点击这里进入阿里云ECS官方页面,立即免费体验云服务器ECS>>>

问题现象

在符合如下条件的Alibaba Cloud Linux 3系统的ECS实例中,执行dnf install docker-ce命令安装容器软件包失败,并出现如下报错。

  • 使用适配CentOS 8系统中的第三方DNF(YUM)源。

  • aliyun_3_x64_20G_alibase_20210425.vhd及之前的所有镜像版本。

系统显示报错信息类似如下。

 
Docker CE Stable - x86_64Failed 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便无法从这个错误的地址中安装软件包。

解决方案

请根据实际需求情况,选择以下对应方案进行修复。

  • 您可以参考方案一:手动修改步骤,通过手动修改$releasever变量值进行修复。

  • 您可以参考方案二:安装插件修改步骤,通过安装dnf-plugin-releasever-adapter插件进行修复。

说明

本文以docker-ce源为例进行介绍,如果您使用的是其他DNF源,解决方案类似。

方案一:手动修改

  1. 远程登录Linux实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例。

  2. 执行以下命令,打开/etc/yum.repos.d/docker-ce.repo配置文件。

     
    vim /etc/yum.repos.d/docker-ce.repo
  3. i键进入编辑模式,找到docker-ce.repo文件中所有存在enabled=1值的源,将源中baseurl$releasever变量替换为8。

  4. 按下Esc键后,输入:wq并按Enter键以保存关闭配置文件,重新进行安装即可。

方案二:安装插件修改

通过安装dnf-plugin-releasever-adapter插件实现$releasever的变量进行自动转换,即将3转换为8。

  1. 确认实例是否支持使用dnf-plugin-releasever-adapter插件。

    dnf-plugin-releasever-adapter插件目前的版本及默认支持的第三方repo如下表所示:




    插件版本

    默认支持的第三方repo

    插件的限制

    • 新版本:1.0-2

    • 旧版本:1.0-1.3

    说明

    新版本插件和旧版本插件不兼容,新版本的配置文件名称为releasever_adapter.conf,旧版本为releasever-adapter.conf。升级版本会删除原来的配置文件。因此升级后,如果需要支持除docker-ce和epel之外的第三方源,需要重新按照步骤修改配置文件的include字段,其他的保持不变。


    docker-ce.repo,epel.repo


    您需要满足以下条件,才可以使用该插件:

    • 操作系统需要是Alibaba Cloud Linux 3。

    • 执行以下命令,确认系统中存在alinux3-plus的repo。

       
      cat /etc/yum.repos.d/AliYun.repo |grep -A3 alinux3-plus

      系统显示类似如下,说明存在alinux3-plus的repo。


  2. 远程登录Linux实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例。

  3. 执行以下命令,安装dnf-plugin-releasever-adapter插件。

    说明

    目前,插件默认对docker-ce和epel源中的$releasever变量值做自动转换。

     
    dnf install dnf-plugin-releasever-adapter --repo alinux3-plus
  4. 若无其他的DNF源需要转换,安装插件后即可直接安装软件;若还有其他的DNF源需要转换,请按照以下方式配置:

    1. 执行以下命令,进入/etc/yum/pluginconf.d/目录。

       
      cd /etc/yum/pluginconf.d/
    2. 执行以下命令,编辑releasever_adapter.conf配置文件。

       
      vim releasever_adapter.conf
      1. i键切换至编辑模式,如果需要添加其他的DNF源,则需要将DNF源的.repo文件名添加在include字段后面,并以逗号隔开。

        说明

        DNF源的.repo文件一般在/etc/yum.repos.d/目录下查看。

        系统显示类似如下。

         
        [main]
        enabled=1[releasevermapping]2.1903 = 73      = 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]等源。

    3. 修改完成后,按下Esc键,然后输入:wq并按回车,保存并关闭配置文件。

    4. 执行如下命令,通过docker-ce、epel和您添加的源安装docker-ce软件。

       
      dnf install docker-ce


这条帮助是否解决了您的问题? 已解决 未解决

提交成功!非常感谢您的反馈,我们会继续努力做到更好! 很抱歉未能解决您的疑问。我们已收到您的反馈意见,同时会及时作出反馈处理!