gpt4 book ai didi

Docker 无法解析私有(private)网络上的 DNS

转载 作者:IT老高 更新时间:2023-10-28 12:42:59 25 4
gpt4 key购买 nike

Docker 是一种主要由程序员使用的软件工具,因为它是程序员用来生成容器镜像的机制。

我的机器在一个带有私有(private) DNS 服务器的私有(private)网络上,以及一个用于 DNS 解析的私有(private)区域。我可以从我的主机解析此区域上的主机,但我无法从我的主机上运行的容器解析它们。

主持人:

root@host:~# cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1

root@host:~# ping privatedomain.io
PING privatedomain.io (192.168.0.101) 56(84) bytes of data.

容器:

root@container:~# cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

nameserver 8.8.8.8
nameserver 8.8.4.4

root@container:~# ping privatedomain.io
ping: unknown host privatedomain.io

很明显,Google 的公共(public) DNS 服务器无法解析我的私有(private) DNS 请求。我知道我可以用 docker --dns 192.168.0.1 强制它,或者在 /etc/default/中设置 DOCKER_OPTS="--dns 192.168.0.1" docker,但我的笔记本电脑经常切换网络。似乎应该有一个系统的方法来解决这个问题。

最佳答案

Docker 通过复制主机的 /etc/resolv.conf 来填充 /etc/resolv.conf,并过滤掉任何本地名称服务器,例如 127.0.1.1。如果之后没有域名服务器,Docker 将添加 Google 的公共(public) DNS 服务器(8.8.8.8 和 8.8.4.4)。

根据Docker documentation :

Note: If you need access to a host’s localhost resolver, you must modify your DNS service on the host to listen on a non-localhost address that is reachable from within the container.

主机上的 DNS 服务是 dnsmasq,因此如果您让 dnsmasq 监听您的 docker IP 并将其添加到 resolv.conf,docker 将配置容器以将其用作名称服务器。

1 . 创建/编辑 /etc/dnsmasq.conf 并添加以下行:

interface=lo
interface=docker0

2 . 找到你的 docker IP(在本例中为 172.17.0.1):

root@host:~# ifconfig | grep -A2 docker0
docker0 Link encap:Ethernet HWaddr 02:42:bb:b4:4a:50
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0

3 . 创建/编辑 /etc/resolvconf/resolv.conf.d/tail 并添加这一行:

nameserver 172.17.0.1

4 .重启网络,更新resolv.conf,重启docker:

sudo service network-manager restart
sudo resolvconf -u
sudo service docker restart

您的容器现在可以从主机使用的任何 DNS 服务器解析 DNS。

† 路径可能是/etc/dnsmasq.conf/etc/dnsmasq.conf.d/docker.conf/etc/NetworkManager/dnsmasq.conf/etc/NetworkManager/dnsmasq.d/docker.conf 取决于您的系统和个人喜好。

关于Docker 无法解析私有(private)网络上的 DNS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39400886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com