Docker使用主机的DNS,而不是/etc/resolv.conf中提到的DNS

Docker使用主机的DNS,而不是/etc/resolv.conf中提到的DNS,docker,dns,ubuntu-18.04,samba,Docker,Dns,Ubuntu 18.04,Samba,我使用的是Ubuntu1804,我创建了一个UbuntuDocker并在上面配置了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.2

我使用的是Ubuntu1804,我创建了一个UbuntuDocker并在上面配置了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是码头工人的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
ifconfig在docker中显示

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
我试过在运行docker时使用dns 172.17.0.1

注意

我在和码头工人一起工作

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

您可以定义docker网络,以使两个docker位于同一网络中;或者使用host.docker.internal通过主机ip从一个主机访问另一个主机--net=不需要主机。如果定义docker网络,则可以将docker名称放在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运行之前的接口相同。此外,您没有将
resolv.conf
从主机装载到docker,因此无法将其路由。
还有其他方法可以做到这一点,但我建议您使用
docker proxy
docker networks
来做到这一点:创建一个vnet,并使用docker名称而不是IP地址访问他们的docker。

您是否尝试过删除
--net=host
选项?@mulg0r我要求主机和docker位于同一网络上,所以我需要保留--net=host选项。我只希望容器使用自己的DNS配置。您可以定义docker网络,以便使两个docker位于同一网络中;或者使用host.docker.internal通过主机ip从一个主机访问另一个主机<代码>--net=host
不需要。如果您定义了一个docker网络,那么您可以将docker名称放在resolv.conf中,而不是放在内部IP中。@mulg0r似乎正是我所需要的。谢谢你的帮助。干杯
docker network create -d bridge mynetwork
docker run --network=mynetwork ...