【问题标题】:Docker uses the DNS of the host instead of the DNS mentioned in /etc/resolv.confDocker 使用主机的 DNS,而不是 /etc/resolv.conf 中提到的 DNS
【发布时间】:2020-08-15 05:06:50
【问题描述】:

我使用的是 Ubuntu 1804,我创建了一个 ubuntu docker 并在其上配置了 samba。每当我跑步时

root@dc2:/# host -t A dc2.sample.example.com

我收到此错误

 ;; reply from unexpected source: 192.168.0.29#53, expected 172.17.0.1#53
    Host dc2.sample.example.com not found: 3(NXDOMAIN)

192.168.0.29 是我的主机在 wlps 网络接口上的 IP。 172.17.0.1 是 docker 的 IP。

我的 docker 上的 /etc/resolv.conf

root@dc2:/# cat /etc/resolv.conf 
nameserver 172.17.0.1
search sample.example.com
nameserver 8.8.8.8
docker 中的

ifconfig 显示了这一点

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:67ff:fe78:f1f1  prefixlen 64  scopeid 0x20<link>
        ether 02:42:67:78:f1:f1  txqueuelen 0  (Ethernet)
        RX packets 16281  bytes 887008 (887.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 24325  bytes 111088731 (111.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp6s0f1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 08:97:98:71:66:a2  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 29556327  bytes 2561211141 (2.5 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 29556327  bytes 2561211141 (2.5 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlp0s20f3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.29  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::5e1a:ef44:3912:319c  prefixlen 64  scopeid 0x20<link>
        ether 5c:87:9c:c2:77:34  txqueuelen 1000  (Ethernet)
        RX packets 97406  bytes 133018627 (133.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 28369  bytes 4610340 (4.6 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

据我了解,它使用的是 wifi(wlp0s20f3) 网络接口。如果我关闭主机上的 wifi 并运行相同的命令,我会得到

root@dc2:/# host -t A dc2.sample.example.com
;; reply from unexpected source: 127.0.0.1#53, expected 172.17.0.1#53
;; Warning: ID mismatch: expected ID 52940, got 62153
dc2.sample.example.com has address 172.17.0.1

我尝试在运行 docker 时使用 --dns 172.17.0.1

注意

我正在使用 docker 运行

sudo docker run -d 
   --net=host
   --dns 172.17.0.1
   -v /etc/krb5.conf:/etc/krb5.conf -v /dev/urandom:/dev/random
   --name kerb
   --cap-add SYS_ADMIN 
   -h dc2 
   --add-host dc2.sample.example.com:172.17.0.1 --add-host dc2:172.17.0.1 
   -e BOOTSTRAP=0 
   kerb:kerb

【问题讨论】:

  • 你试过删除--net=host选项吗?
  • @mulg0r 我要求主机和 docker 在同一个网络上,所以我需要保留 --net=host 选项。我只想让容器使用自己的 DNS 配置。
  • 您可以定义 docker 网络,以便让两个 docker 在同一个网络中;或使用 host.docker.internal 通过主机 ip 从一个访问到另一个。不需要--net=host。如果你定义了一个 docker-network,你可以将 docker name 放在 resolv.conf 中,而不是内部 IP。
  • @mulg0r 似乎正是我所需要的。谢谢您的帮助。干杯

标签: docker dns ubuntu-18.04 samba


【解决方案1】:

您可以定义 docker 网络,以便让两个 docker 在同一个网络中;或使用 host.docker.internal 通过主机 ip 从一个访问到另一个。 --net=host 不需要。如果你定义了一个 docker-network,你可以将 docker name 放在 resolv.conf 中,而不是内部 IP。

/etc/resolv.conf

root@dc2:/# cat /etc/resolv.conf 
nameserver yourdockername
search sample.example.com
nameserver 8.8.8.8

创建一个 docker 网络:

docker network create -d bridge mynetwork
docker run --network=mynetwork ...

(而不是 --net=host),其余相同。

那是因为如果您使用--net=host,您的 docker 中的所有接口都与您的主机在docker run 之前的相同。此外,您没有将resolv.conf 从您的主机安装到您的 docker,因此无法路由它。 还有其他方法可以做到这一点,但我建议你使用docker-proxydocker networks 来做到这一点:创建一个 vnet 并使用 docker 名称而不是 IP 地址访问他们的 docker。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    相关资源
    最近更新 更多