从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容器。