使用Dockerfile构建镜像时repo源问题

使用Dockerfile构建镜像时repo源问题

当编写好Dockerfile后,我的Dockerfile内容如下:

FROM centos
MAINTAINER zzyy<zzyybs@126.com>
 
ENV MYPATH /usr/local
WORKDIR $MYPATH
 
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
 
EXPOSE 80
 
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

执行docker build -t centos-java8:1.6 .进行镜像构建,但是执行到RUN yum -y install vim步骤时候出现错误,内容如下:

Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=container error was
0.482 14: curl#6 - “Could not resolve host: mirrorlist.centos.org; Unknown error”

ERROR: failed to solve: process “/bin/sh -c yum -y install vim” did not complete successfully: exit code: 1

这是因为Dockerfile构建镜像时执行的yum命令使用了本地repo源,这个repo是默认的。

解决办法:
网上很多都说指定Dockerfile中FROM centos为FROM centos:7来指明基础镜像centos版本即可解决,如果还是不行就systemctl restart docker重启docker服务。但是在我机子上都不行!!

为此,我想毕竟是repo源问题,就把repo源添加为阿里云aliyun的源试试看:

FROM centos
MAINTAINER zzyy<zzyybs@126.com>
 
ENV MYPATH /usr/local
WORKDIR $MYPATH

#添加阿里云的repo源
RUN mkdir -p /etc/yum.repos.d/backup && \
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/backup/CentOS-Base.repo && \
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

#更新repo并安装vim
RUN yum clean all && yum makecache fast && \
    yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
 
EXPOSE 80
 
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

最后再次docker build -t构建一下镜像:
在这里插入图片描述
问题得到解决。
在这里插入图片描述

使用该镜像创建容器检查一下jdk、vim是否都安装:
docker run -it --name centos-java8 centos-java8:1.6 bash
在这里插入图片描述

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以使用以下命令在 Dockerfile 中设置 yum : ``` RUN echo "nameserver 8.8.8.8" >> /etc/resolv.conf && \ echo "[yum repo url]" > /etc/yum.repos.d/[repo name].repo ``` 其中,[yum repo url] 是您要使用的 yum 的 URL,[repo name] 是您要创建的 yum 仓库的名称。您可以根据自己的需要进行修改。 ### 回答2: 在Dockerfile中配置yum是为了方便在容器中安装软件包和依赖项。以下是一种设置yum的方法: ```Dockerfile # 使用特定的基础镜像作为基础 FROM centos:latest # 备份默认的yum配置文件 RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak # 将本地的yum配置文件复制到容器中 COPY CentOS-Base.repo /etc/yum.repos.d/ # 更新yum RUN yum clean all && yum makecache && yum -y update # 在此处可以继续安装其他软件包和依赖项 RUN yum -y install package1 package2 # 执行其他操作和配置 ... # 指定容器启动执行的命令 CMD ["/bin/bash"] ``` 上述例子假设你已经在本地创建了一个名为`CentOS-Base.repo`的yum配置文件,它包含了你自定义的yum地址和相关配置。通过在Dockerfile使用COPY命令将该文件复制到容器的`/etc/yum.repos.d/`目录下,覆盖默认的yum配置文件。然后使用`yum clean all`清除旧的缓存,`yum makecache`重新生成yum缓存,`yum -y update`更新所有软件包。接下来,你可以根据你的需求继续安装其他软件包和依赖项。最后,通过CMD命令指定容器启动要执行的命令。 需要注意的是,上述的例子仅仅是一种设置yum的方法,你可以根据自己的需求进行更改和适配。 ### 回答3: 在Dockerfile中配置yum需要按照以下步骤进行: 第一步:选择合适的yum镜像 选择一个合适的yum镜像可以加快软件包的下载速度。有很多可以选择的镜像,常见的有阿里云、华为云等。在Dockerfile中可以使用FROM指令来选择相应的镜像,例如: FROM centos:7 第二步:配置yum 配置yum需要将正确的配置文件复制到镜像中的指定位置。首先,将配置文件复制到镜像的指定目录。可以使用COPY指令来实现,例如: COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo 其中,CentOS-Base.repo是我们提前准备好的配置文件。接下来,使用RUN指令执行更新命令,例如: RUN yum update -y 该命令将会运行在镜像中,并使用复制的配置文件进行更新。这里的"-y"参数是为了在更新过程中自动应答所有的问题。根据实际需求,还可以执行其他的yum命令,例如安装软件包。 第三步:构建镜像Dockerfile所在的目录中打开终端,使用以下命令构建镜像docker build -t [镜像名称] . 其中,[镜像名称]可以根据需求自定义。构建过程会自动执行Dockerfile中的所有指令,其中包括复制配置文件和更新命令,从而完成对yum的配置。 通过以上步骤,就可以在Dockerfile中配置yum。这样,在运行该镜像,容器就能够使用我们指定的yum来获取所需的软件包。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值