【问题标题】:Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist错误:无法下载 repo 'appstream' 的元数据:无法准备内部镜像列表:镜像列表中没有 URL
【发布时间】:2022-04-24 10:39:00
【问题描述】:

我正在尝试使用我在 Dockerfile 中指定的 centOs 上的 yum 下载 java。 拉出 centOs 映像后,运行崩溃并抛出此错误!? 还要提一下我的服务器实例是 AWS EC2!

Step 2/9 : RUN yum install java -y
 ---> Running in 39fc233aa965
CentOS Linux 8 - AppStream                      184  B/s |  38  B     00:00
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
The command '/bin/sh -c yum install java -y' returned a non-zero code: 1

【问题讨论】:

标签: docker centos devops yum


【解决方案1】:

如果您还没有,则需要 gpg 密钥:

wget 'http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-8-3.el8.noarch.rpm'
sudo rpm -i 'centos-gpg-keys-8-3.el8.noarch.rpm'

那么就这么简单的过渡吧:

dnf --disablerepo '*' --enablerepo=extras swap centos-linux-repos centos-stream-repos

别担心 - 它不会删除任何存储库,它只是暂时忽略您的所有存储库,并下载有关新镜像的信息。

此时您可能想要真正升级您的软件包:

sudo dnf distro-sync

您现在可以像往常一样使用“yum”了。

【讨论】:

  • 首先必须从PowerTools 存储库中删除distro-sync 之前的所有包,这些包正在被复制。一些mirror.centos.org 现在似乎是vault.centos.org(存档)。
【解决方案2】:

尝试编辑你的 dockerfile

FROM centos

RUN cd /etc/yum.repos.d/
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

RUN yum -y install java

CMD /bin/bash

参考此代码

failed-metadata-repo-appstream-centos-8

【讨论】:

  • 太棒了!这解决了我的问题。很高兴知道 centos 维护着旧版本的保管库
  • 提供的链接解决了我的问题。我没有使用 docker。
  • 这个链接对我有用!非常感谢您节省时间:)
【解决方案3】:

我尝试使用带有 wsl 的 CentOS 8 并得到同样的错误。解决问题的步骤(以 root 身份):

# sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
# sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
# dnf distro-sync
# dnf -y install java

投票最多的答案对我不起作用(@Hashbrown)。 Dockerfile 的答案也不适合我。

【讨论】:

  • 我认为“dnf distro-sync”将撤消之前 2 个 sed 命令所做的更改
  • dnf 不会更改其在 /etc 下的配置。结帐 man dnf。它只是升级、降级或保留选定的已安装包以匹配任何启用的存储库中可用的最新版本。
【解决方案4】:

转到/etc/yum.repos.d/

cd /etc/yum.repos.d/

运行

sudo sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
sudo yum update -y

然后做你想做的事

【讨论】:

【解决方案5】:

试试这个

来自centos

RUN cd /etc/yum.repos.d/
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

RUN yum -y install java

CMD /bin/bash

【讨论】:

    【解决方案6】:

    转到/etc/yum.repos.d/ 目录。打开.repo文件并手动将镜像列表从$releasever编辑为8-stream

    例如:/etc/yum.repos.d/CentOS-Linux-BaseOS.repo

    1. 在vi中打开文件

      sudo vi /etc/yum.repos.d/CentOS-Linux-BaseOS.repo

    2. 评论mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra

      #mirrorlist=http://......

    3. 在vi中,复制粘贴mirrorlist=http://......

      yy and p

    4. 通过将 $releasever 替换为 8-stream 来取消注释并编辑复制的行

      mirrorlist=http://mirrorlist.centos.org/?release=8-stream&arch=$basearch&repo=BaseOS&infra=$infra

    5. 保存退出vi

      :wq

    对其他 .repo 文件重复上述 5 步。

    【讨论】:

      猜你喜欢
      • 2014-09-11
      • 2023-03-30
      • 2021-10-10
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多