1. 程式人生 > >Docker下搭建DNS伺服器dnsmasq

Docker下搭建DNS伺服器dnsmasq

為方便Hadoop叢集管理,決定利用docker環境手動搭建一個DNS伺服器。

1. 配置容器

選擇andyshinn/dnsmasq的docker映象,2.75版本。執行命令

docker run -d -p 53:53/tcp -p 53:53/udp --cap-add=NET_ADMIN --name dns-server andyshinn/dnsmasq:2.75

本以為順利完成,結果報錯:

docker: Error response from daemon: failed to create endpoint dns-server on network bridge: Error starting userland proxy: listen tcp 0.0.0.0:53: bind: address already in use.

dns服務預設是用的53埠被佔用了。檢視本機端口占用情況:

netstat -lnp|grep 53

發現在宿主機器上有一個dnsmasq服務。google一番瞭解到,原來是ubuntu預設安裝了dnsmasq-base服務。官網提到:

Note that the package “dnsmasq” interferes with Network Manager which can use “dnsmasq-base” to provide DHCP services when sharing an internet connection. Therefore, if you use network manager (fine in simple set-ups only), then install dnsmasq-base, but not dnsmasq. If you have a more complicated set-up, uninstall network manager, use dnsmasq, or similar software (bind9, dhcpd, etc), and configure things by hand.

通過kill 停掉該服務。再次執行上述命令,通過

docker ps

檢視,容器啟動成功。

2. 配置DNS服務

進入容器

docker exec -it dns-server /bin/sh

首先配置上行的真正的dns伺服器地址,畢竟你只是個本地代理,不瞭解外部規則。建立檔案:

vi /etc/resolv.dnsmasq

新增內容:

nameserver 114.114.114.114
nameserver 8.8.8.8

配置本地解析規則,這才是我們的真實目的。新建配置檔案

vi /etc/dnsmasqhosts

新增解析規則

172.20.2.14 master
172.20.2.15 slave15
172.20.2.16 slave16

修改dnsmasq配置檔案,指定使用上述兩個我們自定義的配置檔案

vi /etc/dnsmasq.conf

修改下述兩個配置

resolv-file=/etc/resolv.dnsmasq
addn-hosts=/etc/dnsmasqhosts

回到宿主,重啟dns-server容器服務。

docker restart dns-server

通過本機驗證

修改本機dns伺服器地址:

通過dig命令檢視

dig master

一切如願。