如何告诉Docker使用主机DNS配置?

马文

我在公司代理后面工作。由于实施了许多限制,因此在构建docker映像(主要是基于ubuntu的映像)时,我必须切换到公共网络。构建是在同一台计算机上执行的(因此,在同一台dns conf上)。

除了构建之外,我总是在此代理后面运行容器。该公司(确实)也有自己的dns。

不幸的是,我不了解如何以“正确的方式”将主机dns传递给容器,也不了解docker如何管理容器resolv.conf。

当我查看主机时,会看到这样的conf:

$ cat /etc/resolv.conf

nameserver 8.8.8.8
nameserver 8.8.8.4
nameserver 10.xxx.yyy.z
search rennes.mycompany.fr

从我的容器中,我看到:

search rennes.mycompany.fr
nameserver 127.0.0.11
options ndots:0

在我看来,奇怪的是,在容器中只能找到一部分主机配置。当我尝试从容器中获取任何公司托管的名称时,我会遇到名称解析失败的情况。

但是,如果我将主机的resolv.conf名称服务器添加到容器的名称服务器中,它将起作用:

$ echo名称服务器192.168.1.1 >> /etc/resolv.conf

因此,这确实不是做到这一点的方法……但是我不确定应该如何执行它。我试图在docker-compose中将'dns'添加到我的服务中,但是我没有工作(或者不是我所理解的方式),并且文档相当简明...

有没有办法告诉docker使用/共享主机的dns配置?我的问题是否可能来自我在公司网络外部建立形象的原因?

编辑: docker-compose.yml

version: '3.3'
services:
  my-apache:
    image: apache:latest
    ports:
      - 8088:80
    networks:
      - my-project-net
    dns: 
      - 192.168.1.1
    depends_on:
      - my-project
  my-project:
    image: my-project:latest
    networks:
      - my-project-net
    dns: 
      - 192.168.1.1

networks:
  my-project-net:
    driver: bridge

只有'my-project'才需要访问公司dns,但我都向它们都添加了dns,以防万一我错过了一些线索...

编辑2:更多细节和尝试

  • docker版本:18.03.0-ce,内部版本0520e24
  • docker-compose版本:1.18.0,内部版本8dd22a9

我尝试解析的名称如下所示:

some-pf-db.network.mycompany.fr

(已修改的)docker daemon conf看起来像这样:

$ cat /etc/docker/daemon.json:

{
    "insecure-registries": [
        "some.test.registry.mycompany.fr:5000"
    ],
    "log-driver": "json-file",
    "log-opts": {
        "max-file": "3",
        "max-size": "10m"
    },
    "dns-opts": ["ndots:15"]
}

在@BMitch链接之后,我尝试使用最多15个ndots选项更新docker daemon(+ restart)(不要以为我需要那么多,但这是懒惰的方式!)...不幸的是,它没有解决这个问题。新值替换了容器中的前一个值,但始终无法到达dns

无法将主机名“ some-pf-db.network.mycompany.fr”转换为地址:名称解析暂时失败

EDIT3:我看错了容器...因此,将docker daemon conf(/etc/docker/daemon.json)中的点(ndots)阈值更改为(例如)15,并删除了“ dns”服务的参数使魔术发挥作用!我现在可以访问我的公司dns的名称(其中有很多点!)

米奇

127.0.0.11即使在容器上覆盖DNS,也应在容器内输入条目。这指向容器内部的回送接口,该接口具有端口53的映射以返回到docker引擎以进行DNS解析。您需要docker进行DNS解析,以使您可以使用DNS进行容器到容器的联网以进行发现。

即使127.0.0.11容器中条目,您仍然应该仍然看到docker引擎向您的DNS服务器发出呼叫,因此这不是错误,也不是缺乏可配置性,您只是从容器内部看不到此配置。

我们需要有关您遇到的实际问题的更多详细信息,但是我之前从中看到的一个可能的问题是,在某些特定情况下,DNS无法解析没有全限定名称的外部主机。您可以在此问题/线程中阅读有关此内容的信息:https : //github.com/moby/moby/issues/32093

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用docker-compose使用主机网络配置

如何告诉Mac上的Docker出于所有目的使用主机网络?

如何使用DHCP地址本地主机配置Docker容器?

我如何告诉我的Dockerfile在docker-compose的RUN命令中使用哪个DNS?

如何使VirtualBox VM使用主机的DNS?

使用每个主机/ URL的代理配置Docker

如何告诉 tox 使用受信任的主机和索引?

无法解析主机-DNS配置

一旦告诉我的共享主机,如何告诉Deployer使用不同的PHP版本?

NGINX如何解析Docker DNS主机名?

如何在Java中配置主机名解析以使用自定义DNS服务器?

使用主机DNS服务器的Docker-compose容器

如何配置Docker Desktop for Mac中使用的DNS服务器?

如何告诉配置脚本使用我自己的工具链

如何创建配置文件并告诉Gunicorn使用它?

构建Docker映像时使用主机上的配置文件

使用Laravel Docker Redis的Gitlab CI配置错误的主机或端口

如何使用主机网络进行Docker撰写?

Docker容器如何使用主机OS?

为主机和代理配置DNS规则?

在 jenkins 中配置 Docker 主机

kubernetes vs Docker DNS 配置

从主机查询Docker嵌入式DNS

如何使用docker cp从主机同步到docker容器

在Docker中使用Docker时如何共享主机网桥

如何在不ping或bind-utils的情况下从超薄主机(docker)获取远程主机DNS地址?

如何授予Docker容器访问主机上的dnsmasq本地DNS解析器的权限?

使用Vagrant进行配置时如何强制主机密钥?

如何使用主机名配置Vagrant虚拟机?