错误:无法下载存储库“appstream”的元数据:无法准备内部镜像列表:镜像列表中没有 URL

问题描述 投票:0回答:11

我正在尝试使用我在 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
11个回答
145
投票

尝试编辑你的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

参考此代码

失败-元数据-repo-appstream-centos-8


72
投票

如果您还没有,您将需要 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”。


61
投票

前往

/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

然后做你想做的事


16
投票

我尝试将 CentOS 8 与 wsl 一起使用并得到相同的错误。解决问题的步骤(以 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 的答案也不适合我的情况。


14
投票

使用以下命令更新 AWS EC2 上的 centOS8.0:

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

14
投票

CentOS 8 已于 2021 年 12 月 31 日终止(公告)。

因此,镜像的 URL 不再起作用。 CentOS

官方建议
通过以下方式从 CentOS Linux 8 转换为 CentOS Stream 8,而不是使用 sed 修改 URL 以指向存档镜像:

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

之后,

dnf
/
yum
将再次工作。


3
投票

试试这个

来自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

0
投票

请按照以下步骤操作:

  1. 进入/etc/yum.repos.d/目录。

    cd /etc/yum.repos.d/

  2. 运行以下命令对所有 yum.repos.d 文件中的镜像列表进行哈希处理,然后将现有的 Baseurl 替换为 vault.centos.org

    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-*

  3. 然后运行 yum update 或安装任何你想要的软件包

    百胜更新-y


0
投票

使用以下内容更新您的 docker 文件。应该可以。

    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 update -y

0
投票

我的答案必须是其他一些答案的混合体。我使用最新的(截至几天前)CentOS 和 Docker 默认映像。 (sudo失败,因为我已经在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-*
yum install PACKAGE

无需更新 yum


-1
投票

转到

/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 个步骤。

© www.soinside.com 2019 - 2024. All rights reserved.