Networking 从docker容器运行docker build时主机名解析失败

Networking 从docker容器运行docker build时主机名解析失败,networking,docker,redhat,rhel,docker-compose,Networking,Docker,Redhat,Rhel,Docker Compose,我们正在从docker容器运行Jenkins CI服务器,该容器从docker compose开始。Jenkins服务器正在运行一些作业,这些作业从git中提取项目并以标准方式在docker容器上执行docker build.。为了能够在docker容器内使用docker,我们将通过docker compose在Jenkins容器上安装/var/run/docker.sock 我们试图在那里构建的一些Dockerfile-s正在从我们的文件服务器下载文件(例如,第三方安装映像)。这样的Docke

我们正在从docker容器运行Jenkins CI服务器,该容器从docker compose开始。Jenkins服务器正在运行一些作业,这些作业从git中提取项目并以标准方式在docker容器上执行
docker build.
。为了能够在docker容器内使用docker,我们将通过docker compose在Jenkins容器上安装
/var/run/docker.sock

我们试图在那里构建的一些Dockerfile-s正在从我们的文件服务器下载文件(例如,第三方安装映像)。这样的Dockerfile命令看起来像
runcurl-oxx.ziphttp://fileserver/xx-1.2.3.zip

文件服务器
主机名通过
/etc/hosts
文件解析,并解析为运行Jenkins CI服务器的主机的公共IP。Jenkins容器的docker compose配置还包括将
文件服务器
指向主机公共IP的
extra_hosts
参数

问题在于,构建docker容器时,Jenkins在自己的容器中运行会失败,并显示一条普通的
未知主机:fileserver
消息。如果我通过
docker exec-it
进入Jenkins容器,我可以执行相同的
curl
命令并解析主机,但是如果我尝试运行
docker build。
在那里尝试运行相同的curl命令,它无法解析主机


我们的主机是RHEL,我无法在我的桌面Arch Linux上重现该问题,因此我怀疑这是redhat特定的问题(再次)。

Docker构建不会发生在发出命令的机器上(在本例中是您的jenkins容器)-它们发生在具有Docker引擎的机器上。这意味着您的Jenkins机器将对源目录进行tar处理,并将其发送回父机器以进行构建。因此,请检查curl命令是否在父计算机而不是Jenkins容器中工作。

Docker生成不会发生在发出该命令的计算机上(本例中是您的Jenkins容器)-它们发生在具有Docker引擎的计算机上。这意味着您的Jenkins机器将对源目录进行tar处理,并将其发送回父机器以进行构建。因此,请检查curl命令是否在父计算机而不是Jenkins容器中工作。

主机可以完美地解析并访问
文件服务器
主机,它是它自己的/etc/hosts文件中的别名之一,指向一个外部IP地址(因此不是127.0.0.1)。如果有帮助,主机是RedHat Enterprise Linux服务器。显然,我们的设置在其他地方(例如,在我的桌面archlinux上)也能正常工作,但在这个RHEL上却不行。。(是的,我关掉了SELinux)对不起,克里斯托夫-这耗尽了我的好主意:(我曾使用jenkins在主机docker守护进程上用ubuntu主机构建映像,但我没有过多地使用RHEL。主机可以完美地解析并访问
文件服务器
主机,它是它自己的/etc/hosts文件中的一个别名,指向一个外部IP地址(因此不是127.0.0.1)如果有帮助的话,主机是RedHat Enterprise Linux服务器。显然,我们的设置在其他地方(例如,在我的桌面archlinux上)可以正常工作,但在这个RHEL上不能正常工作。(是的,我关闭了SELinux)对不起,Kristof-这耗尽了我的好主意:(我曾使用jenkins在主机docker守护进程和ubuntu主机上构建图像,但我没有过多地使用RHEL。