记一次docker构建自定义centos镜像问题

Docketfile文件

FROM centos
MAINTAINER mika

ENV path /home/mika
WORKDIR $path

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $path
CMD echo "---end---"
CMD /bin/bash

在执行构建时报错

Error: Failed to download metadata for repo ‘appstream’: Cannot prepare internal mirrorlist: No URLs in mirrorlist

根据报错信息找到关联问题:
链接:https://blog.youkuaiyun.com/xiaocao_debug/article/details/122807870

在2022年1月31日,CentOS团队终于从官方镜像中移除CentOS 8的所有包。
CentOS8已于2021年12月31日寿终正非,但软件包仍在官方镜像上保留了一段时间。现在他们被转移到https://vault.centos.org

简单点说,就是CentOS 8的rpm包已从原yum仓库地址移除,不再支持,但是这些包被转移到了https://vault.centos.org

解决方案:
知道了原因,就知道了解决方法,将默认得yum仓库地址修改为https://vault.centos.org即可
配置文件位于目录/etc/yum.repos.d下,下面是centos8的演示结果,centos7内容会不太一样。

[root@b8990d532e92 yum.repos.d]# pwd
/etc/yum.repos.d
[root@b8990d532e92 yum.repos.d]# tree
.
|-- CentOS-Linux-AppStream.repo
|-- CentOS-Linux-BaseOS.repo
|-- CentOS-Linux-ContinuousRelease.repo
|-- CentOS-Linux-Debuginfo.repo
|-- CentOS-Linux-Devel.repo
|-- CentOS-Linux-Extras.repo
|-- CentOS-Linux-FastTrack.repo
|-- CentOS-Linux-HighAvailability.repo
|-- CentOS-Linux-Media.repo
|-- CentOS-Linux-Plus.repo
|-- CentOS-Linux-PowerTools.repo
`-- CentOS-Linux-Sources.repo

随便查看一个仓库配置,忽略注释,内容如下,

[root@b8990d532e92 yum.repos.d]# cat CentOS-Linux-BaseOS.repo 
# CentOS-Linux-BaseOS.repo
[baseos]
name=CentOS Linux $releasever - BaseOS
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

其中mirrorlist指定了yum源地址,是不是对应了报错信息,Cannot prepare internal mirrorlist: No URLs in mirrorlist

找到配置了,修改我也不太熟悉操作,直接找到的网上方法,使用sed命令批量编辑匹配到的文本文件

 # 将/etc/yum.repos.d/目录下所有CentOS-*格式的文件中的mirrorlist配置注释掉
 sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*
 # 将/etc/yum.repos.d/目录下所有CentOS-*格式的文件中的baseurl的注释取消掉,并将地址内容改为指定的新地址
 sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*

所以修改之后,再查看内容

[root@b8990d532e92 yum.repos.d]# cat CentOS-Linux-BaseOS.repo 
# CentOS-Linux-BaseOS.repo
[baseos]
name=CentOS Linux $releasever - BaseOS
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
baseurl=http://vault.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

回到最开始构建镜像,经实测,解决方式也有两种:

  1. 指定centos版本
    修改为 FROM centos:7,因为默认是8,改为7,惊奇的发现7的yum源还是可用的,不用做修改
FROM centos:7
MAINTAINER mika

ENV path /home/mika
WORKDIR $path

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $path
CMD echo "---end---"
CMD /bin/bash
  1. 修改YUM源地址
    在Dockerfile文件中,执行yum之前,执行上述两天sed命令,修改yum源地址
FROM centos
MAINTAINER mika

ENV path /home/mika
WORKDIR $path

RUN sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*
RUN sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*
RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $path
CMD echo "---end---"
CMD /bin/bash
CentOS 7上使用Docker创建自定义的Nginx镜像,你可以按照以下步骤操作: 1. 首先确保你已经安装了Docker环境。如果尚未安装,可以通过官方提供的脚本或者使用yum安装Docker。 2. 安装完成后,下载一个官方的Nginx基础镜像作为起点。你可以通过运行以下命令来实现这一点: ``` docker pull nginx ``` 3. 接下来,创建一个文件夹来存放你将要自定义的Nginx配置文件和网站文件: ``` mkdir -p ~/nginx-custom-conf ``` 4. 将你的Nginx配置文件(通常是nginx.conf)复制到该文件夹中。例如,你可以使用`nginx.conf.default`作为默认配置,并做适当修改: ``` cp /etc/nginx/nginx.conf ~/nginx-custom-conf/nginx.conf ``` 5. 之后,你需要编写一个Dockerfile来定义你的自定义Nginx镜像。在Dockerfile中,你将指定基础镜像,复制配置文件,以及指定容器启动时执行的命令。以下是一个简单的Dockerfile示例: ``` # 使用官方的Nginx镜像作为基础镜像 FROM nginx:latest # 复制自定义的nginx配置文件到容器中的相应位置 COPY nginx.conf /etc/nginx/nginx.conf # 复制你的网站文件到容器中的相应位置,这里假设是html文件夹 COPY html /usr/share/nginx/html # 指定容器启动时执行的命令 CMD ["nginx", "-g", "daemon off;"] ``` 6. 在你的Dockerfile所在的目录下,构建你的自定义Nginx镜像: ``` docker build -t my-own-nginx . ``` 7. 构建完成后,你可以通过以下命令查看你的镜像是否创建成功: ``` docker images ``` 8. 最后,使用以下命令启动你的自定义Nginx容器: ``` docker run -d -p 80:80 my-own-nginx ``` 这样你就创建并运行了一个带有自定义配置和网站文件的Nginx Docker容器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值