全部產品
Search
文件中心

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

更新時間:Jun 19, 2024

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

問題現象

在符合如下條件的Alibaba Cloud Linux 3系統的ECS執行個體中,執行dnf install docker-ce命令安裝容器軟體包失敗,並出現如下報錯。

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

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

系統顯示報錯資訊類似如下。

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便無法從這個錯誤的地址中安裝軟體包。

解決方案

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

說明

本文以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 = 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]等源。

    3. 修改完成後,按下Esc鍵,然後輸入:wq並按斷行符號,儲存並關閉設定檔。

    4. 執行如下命令,通過docker-ce、epel和您添加的源安裝docker-ce軟體。

      dnf install docker-ce