从Docker容器运行Docker构build时,主机名parsing失败

我们从docker容器运行一个Jenkins CI服务器,用docker-compose开始。 Jenkins服务器正在运行一些作业,这些作业是从git中拉出项目并构builddocker容器的执行docker build .的标准方式docker build . 在他们。 为了能够在Docker容器中使用docker,我们使用docker-compose将其挂载到/var/run/docker.sock上。

我们正在尝试构build的一些Dockerfile正在从我们的文件服务器(例如第三方安装映像)下载文件。 这样一个Dockerfile命令看起来像RUN curl -o xx.zip http://fileserver/xx-1.2.3.zip

fileserver主机名通过/etc/hosts文件parsing,并parsing为运行Jenkins CI服务器的主机公共IP。 用于Jenkins容器的extra_hosts -composeconfiguration还包括将fileserver指向主机的公共IP的extra_hosts参数。

问题是在Jenkins运行它自己的容器中构buildDocker容器失败,并显示一个普通的Unknown host: fileserver消息。 如果我通过docker exec -it <id>进入Jenkins容器,我可以执行相同的curl命令并parsing主机,但是如果我尝试运行docker build . 那里试图运行相同的curl命令,它无法parsing主机。

我们的主机是一个RHEL,我没有在我的桌面Arch Linux上重现这个问题,所以我怀疑这是一个特定于redhat的问题(再次)。

Docker构build不会发生在发出命令的机器上(在这种情况下,您的jenkins容器) – 它们发生在使用Docker引擎的机器上。 这意味着您的Jenkins机器会打开源代码目录并将其发回父机器,以便构build发生。 因此,请检查curl命令是否从父机器运行,而不是Jenkins容器。