共计 1727 个字符,预计需要花费 5 分钟才能阅读完成。
为方便 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
一切如愿。
相关阅读:
Ubuntu 10.10 下 DNSmasq 和 Named 似有冲突 http://www.linuxidc.com/Linux/2010-12/30338.htm
Ubuntu 8.10 下使用 DNSmasq 提供 DNS 和 DHCP 服务 http://www.linuxidc.com/Linux/2008-12/17589.htm
用 DNSmasq 搭建小型的内网 DNS http://www.linuxidc.com/Linux/2013-04/82073.htm
Ubuntu Server 12.04 下 Cobbler + DNSmasq +tftpd-hpa 的安装配置 http://www.linuxidc.com/Linux/2013-11/92573.htm
DNSmasq 的详细介绍:请点这里
DNSmasq 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-08/134538.htm