起因

最近在为应用打包 arm64架构应用环境的docker包。基于:

Linux aarch64 aarch64 aarch64 GNU/Linux

基础镜象使用 CentOS8,过包过程中报错。

报错

虽说 CentOS8 已经不维护了,但是很多项目还是基于CentoOS8构建。
使用阿里云基于CentOS8构建 CentOS8 镜像构建过程中报错:

#5 5.239 CentOS Linux 8 - AppStream 8.9 B/s | 38 B 00:04
#5 5.241 Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

原因

在 Dockerfile 中使用到了yum 进行安装。阿里云官方给出解释:

CentOS 8操作系统版本结束了生命周期(EOL),Linux社区已不再维护该操作系统版本。建议您切换到Anolis或Alinux。如果您的业务过渡期仍需要使用CentOS 8系统中的一些安装包,请根据下文切换CentOS 8的源。

文档:https://help.aliyun.com/document_detail/405635.html?spm=5176.smartservice_service_chat.0.0.712c3f1bBoZ19I

解决

上面官方已经给出了解决方案:切换源。
那就来切一切。

1
2
3
4
5
6
FROM centos:centos8

ENV UNZIP_DISABLE_ZIPBOMB_DETECTION=TRUE
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-*

切换源之后,再打包没有问题。