从docker容器

时间:2015-09-02 11:58:12

标签: networking docker redhat rhel docker-compose

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

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

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

问题是,使用Jenkins在自己的容器中运行构建docker容器会失败,并显示一条简单的Unknown host: fileserver消息。如果我通过docker exec -it <id>输入Jenkins容器,我可以执行相同的curl命令并解析主机,但如果我尝试运行docker build .,那么尝试运行相同的curl命令,它无法解析主机。

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

1 个答案:

答案 0 :(得分:0)

Docker构建不会发生在发出命令的机器上(在这种情况下是你的jenkins容器) - 它们发生在带有Docker Engine的机器上。这意味着您的Jenkins机器会将源目录更新并将其发送回父计算机以进行构建。因此,检查curl命令是否来自父机器,而不是Jenkins容器。