build dockerfile问题记录
Dockerfile
项目场景:
在centos8使用docker build生成镜像
问题描述:
编写如下dockerfile
FROM centos
MAINTAINER jeffreyzhou<xxxxx@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "-----end-----"
CMD /bin/bash
出现如下报错:
Step 5/10 : RUN yum -y install vim
---> Running in 8d007e8556aa
CentOS-8 - AppStream 0.0 B/s | 0 B 02:00
Errors during downloading metadata for repository 'AppStream':
- Curl error (6): Couldn't resolve host name for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=container [Could not resolve host: mirrorlist.centos.org]
Error: Failed to download metadata for repo 'AppStream': Cannot prepare internal mirrorlist: Curl error (6): Couldn't resolve host name for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=container [Could not resolve host: mirrorlist.centos.org]
The command '/bin/sh -c yum -y install vim' returned a non-zero code: 1
原因分析:
从报错看出无法访问http://mirrorlist.centos.org/,但是该地址能够ping通
目前尚未找到具体原因
但是用网上换源的方法可以解决
解决方案:
centos8使用的是mirrorlist来配置repo源,通过mirrorlist指向一个存放镜像地址列表的url地址。
但是这里无法访问该url地址,所以可以修改为baseurl来配置repo源。
由于CentOS 8主要使用AppStream, BaseOS, Extras三个仓库,所以在这里主要配置上面三个仓库对应的配置文件,这里的三个仓库可以理解为同一个软件源中保存了不同种类软件的不同部分。
具体修改如下:
在/etc/yum.repos.d下找到CentOS-AppStream.repo、CentOS-Base.repo、CentOS-Extras.repo三个文件,用编辑器做如下修改:
CentOS-AppStream.repo
修改前:
name=CentOS-$releasever - AppStream
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
修改后:
name=CentOS-$releasever - AppStream
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
baseurl=https://mirrors.aliyun.com/centos/$releasever/AppStream/$basearch/os/
CentOS-Base.repo
修改前:
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
修改后:
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
baseurl=https://mirrors.aliyun.com/centos/$releasever/BaseOS/$basearch/os/
CentOS-Extras.repo
修改前:
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/extras/$basearch/os/
修改后:
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/extras/$basearch/os/
baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/os/
然后更新一下缓存
yum makecache
再重启一下docker
systemctl restart docker