全部產品
Search
文件中心

:在Alibaba Cloud Linux 2系統的ECS執行個體中,使用docker-ce、epel等第三方YUM源安裝軟體失敗怎麼辦?

更新時間:Jun 19, 2024

本文介紹在Alibaba Cloud Linux 2系統的ECS執行個體中,使用docker-ce、epel等第三方YUM源安裝軟體失敗的解決方案。

問題現象

在符合如下條件的Alibaba Cloud Linux 2系統的ECS執行個體中,使用適配CentOS 7系統中的docker-ce、epel第三方YUM源,執行yum install docker-ce命令安裝Docker軟體包失敗,並提示如下報錯。

  • 鏡像:Alibaba Cloud Linux 2.1903 LTS 64位。

  • 鏡像ID:aliyun_2_1903_x64_20G_alibase_20210325.vhd及之前所有版本。

Loaded plugins: fastestmirror, langpacks, update-motd
Loading mirror speeds from cached hostfile
  * epel: mirror.sjtu.edu.cn 
https://mirrors.aliyun.com/docker-ce/linux/centos/2.1903/x86_64/stable/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found 
Trying other mirror.
Downloading packages:
docker-ce-20.10.6-3.el7.x86_64 FAILED
https://mirrors.aliyun.com/docker-ce/linux/centos/2.1903/x86_64/stable/Packages/docker-ce-20.10.6-3.el7.x86_64.rpm: [Errno 14] HTTPS Error 404 - Not Found 
Trying other mirror.
docker-ce-rootless-extras-20.1 FAILED
https://mirrors.aliyun.com/docker-ce/linux/centos/2.1903/x86_64/stable/Packages/docker-ce-rootless-extras-20.10.6-3.el7.x86_64.rpm: [Errno 14] HTTPS Error 404 - Not Found
 Trying other mirror. 


Error downloading packages:
  3:docker-ce-20.10.6-3.el7.x86_64: [Errno 256] No more mirrors to try.
  docker-ce-rootless-extras-20.10.6-3.el7.x86_64: [Errno 256] No more mirrors to try.

問題原因

第三方YUM源僅適配CentOS 7發行版,Alibaba Cloud Linux 2作業系統與CentOS 7作業系統的$releasever值不同,導致YUM解析後的地址無效,從而下載容器軟體包失敗。

說明

YUM安裝docker-ce軟體包時,首先會在系統中擷取版本號碼,即$releasever值,然後替換相應YUM源中baseurl地址對應的$releasever變數,YUM從替換後的baseurl地址中擷取相關資料。由於CentOS 7作業系統的$releasever值為7,Alibaba Cloud Linux 2作業系統的$releasever值為2.1903,因此解析後的baseurl地址並非預期地址,YUM便無法從這個錯誤的地址中擷取資料。

解決方案

請根據實際需求情況,選擇以下對應方案進行修複。

說明

下列操作以docker-ce源為例進行舉例,如果您使用的是其他YUM源,解決方案類似。

方案一:手動修改

  1. 遠程登入Linux執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 執行以下命令,編輯/etc/yum.repos.d/docker-ce.repo設定檔。

    vim /etc/yum.repos.d/docker-ce.repo
    1. i鍵切換至編輯模式,找到docker-ce.repo檔案中所有enabled=1值的源,將源中baseurl地址的$releasever變數修改為7,修改之後的內容如下所示。 Dingtalk_20210610100121.jpg

    2. 修改完成後,按下Esc鍵後,輸入:wq並斷行符號以儲存並關閉設定檔,重新安裝軟體包即可。

方案二:安裝外掛程式修改

安裝yum-plugin-releasever-adapter外掛程式實現$releasever值的自動轉換,即將2.1903轉換為7。

  1. 確認執行個體是否支援使用yum-plugin-releasever-adapter外掛程式。

    yum-plugin-releasever-adapter外掛程式目前的版本及預設支援的第三方repo如下表所示:

    外掛程式版本

    預設支援的第三方repo

    外掛程式的限制

    1.0-1.3

    docker-ce.repo,epel.repo

    您需要滿足以下條件,才可以使用該外掛程式:

    • 作業系統需要是Alibaba Cloud Linux 2。

    • 執行以下命令,確認系統中存在plus的repo。

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

      系統顯示類似如下,說明存在plus的repo。 Dingtalk_20210622170320.jpg

  2. 遠程登入Linux執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  3. 執行以下命令,安裝yum-plugin-releasever-adapter外掛程式,外掛程式預設對docker-ce、epel第三方YUM源中的$releasever值自動進行轉換。

    yum install yum-plugin-releasever-adapter --disablerepo=* --enablerepo=plus
  4. 若無其他的YUM源需要轉換,安裝外掛程式後即可直接安裝軟體;若還有其他的YUM源需要轉換,請按照以下方式配置:

    1. 執行以下命令,進入指定目錄。

      cd /etc/yum/pluginconf.d/
    2. 執行以下命令,編輯releasever-adapter.conf設定檔。如果需要添加其他的YUM源,則需要將YUM源的.repo檔案名稱添加在includes欄位後面,並以逗號隔開。

      vim releasever-adapter.conf

      系統顯示類似如下。

      [main]
      
      enabled=1
      
      hostfilepath=timedhosts.txt
      
      
      [releasevermapping]
      
      release_dict={'2.1903':'7', '3':'8'}
      
      
      [reposlist]
      
      includes=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-stabledocker-ce-stable-debuginfo兩個源名稱,均以docker-ce為首碼。

    3. 儲存設定檔,執行以下命令,即可通過docker-ce、epel第三方YUM源安裝軟體包。

      yum install docker-ce