Mar*_*vin 13 dns docker docker-compose
我在公司代理后面工作。由于强制执行了许多限制,当我来构建我的 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
Run Code Online (Sandbox Code Playgroud)
从我的容器中,我看到:
search rennes.mycompany.fr
nameserver 127.0.0.11
options ndots:0
Run Code Online (Sandbox Code Playgroud)
在我看来很奇怪的是,在容器中只能找到一部分主机配置......当我尝试从容器访问任何公司托管的名称时,我遇到了名称解析失败。
但是,如果我将主机的 resolv.conf 名称服务器添加到容器的名称服务器中,它会起作用:
$ echo nameserver 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
Run Code Online (Sandbox Code Playgroud)
只有“我的项目”需要访问公司 dns,但我将 dns 添加到两者中,以防我错过了一些线索......
编辑 2:更多细节和尝试
我尝试解析的名称如下所示:
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"]
}
Run Code Online (Sandbox Code Playgroud)
在@BMitch链接之后,我尝试使用最多 15 个 ndots 选项更新docker守护进程(+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
| 归档时间: |
|
| 查看次数: |
25745 次 |
| 最近记录: |