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

Yus*_*suf 105 centos yum docker devops

我正在尝试使用我在 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
Run Code Online (Sandbox Code Playgroud)

小智 180

尝试编辑你的 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
Run Code Online (Sandbox Code Playgroud)

参考这段代码

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

  • 惊人的!这解决了我的问题。很高兴知道 centos 维护着旧版本的库 (5认同)

Has*_*own 78

如果您还没有,您将需要 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'
Run Code Online (Sandbox Code Playgroud)

然后就像这样简单地转换:

dnf --disablerepo '*' --enablerepo=extras swap centos-linux-repos centos-stream-repos
Run Code Online (Sandbox Code Playgroud)

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

此时您可能想要实际升级您的软件包:

sudo dnf distro-sync
Run Code Online (Sandbox Code Playgroud)

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


Lee*_*Lee 75

/etc/yum.repos.d/

cd /etc/yum.repos.d/
Run Code Online (Sandbox Code Playgroud)

跑步

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
Run Code Online (Sandbox Code Playgroud)

然后做你想做的事

  • /sf/answers/5011038931/ 中给出的答案相同 (2认同)
  • 唯一真正对 WSL2 中导入 Docker 映像 (Centos) 有帮助的答案。 (2认同)

sta*_*tor 22

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
Run Code Online (Sandbox Code Playgroud)

之后,dnf/yum将再次工作。


Dan*_*ski 17

我尝试将 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
Run Code Online (Sandbox Code Playgroud)

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


sfl*_*z05 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-*
Run Code Online (Sandbox Code Playgroud)