我们正在从 docker 容器运行 Jenkins CI 服务器,从 docker-compose 开始。 Jenkins 服务器正在运行一些作业,这些作业从 git 中提取项目并以执行 docker build .
的标准方式构建 docker 容器。在他们。为了能够在 docker 容器内使用 docker,我们正在安装 /var/run/docker.sock
使用 docker-compose 到 Jenkins 容器。
我们尝试构建的一些 Dockerfile-s 正在从我们的文件服务器下载文件(例如第 3 方安装镜像)。这样的 Dockerfile 命令看起来像 RUN curl -o xx.zip http://fileserver/xx-1.2.3.zip
。
fileserver
主机名通过 /etc/hosts
解析文件,它解析为运行 Jenkins CI 服务器的主机的公共(public) IP。 Jenkins 容器的 docker-compose 配置还包括 extra_hosts
指向 fileserver
的参数到主机的公共(public)IP。
问题是,使用在自己的容器中运行的 Jenkins 构建 docker 容器失败,并显示简单的 Unknown host: fileserver
信息。如果我通过docker exec -it <id>
进入Jenkins容器,我可以执行相同的 curl
命令并解析主机,但如果我尝试运行 docker build .
尝试运行相同的curl命令,但无法解析主机。
我们的主机是 RHEL,我未能在桌面 Arch Linux 上重现该问题,因此我怀疑这是特定于 Redhat 的问题(再次)。
最佳答案
添加--network=host,以便构建环境将使用主机域解析。
docker build --network=host foo/bar:latest .
关于networking - 从 docker 容器运行 docker build 时主机名解析失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32352540/