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

标签 networking docker redhat rhel docker-compose

我们正在从 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/

相关文章:

linux - 正确使用 linux inotify - 每次都重新打开?

linux - Linux 中的 Java7 安装

c# - 如何使用 C# 从 Windows Mobile 打开网络连接?

postgresql - 如何使用 dbeaver 连接到在本地主机上运行的 docker 上设置的 Postgresql?

networking - 使用新内核 5.6.0 后 eth1 消失 | uSID |森托斯

python - 如何正确导入 Azure SDK for Python 3.6

docker - 链接数据剧院| standard_init_linux.go:195:导致 “no such file or directory”的exec用户进程

compilation - 无法编译 gearman - 配置脚本失败

python - 套接字和线程间的内部通信

php - 并发使用持久化 PHP 套接字