确保自己系统安装好docker后就可以进行搭建DNS服务器的步骤了

拉取sameersbn/bind镜像

docker pull sameersbn/bind:9.16.1-20200524

新建DNS服务器容器

docker run --name bind -it \
  -e WEBMIN_ENABLED=true \
  --restart=always\
  --publish 53:53/tcp --publish 53:53/udp --publish 10000:10000/tcp \
  --volume /srv/docker/bind:/data \
  sameersbn/bind:9.16.1-20200524 -4

参数

-d detaches, 后台运行容器,并返回容器ID
-e WEBMIN_ENABLED=true 启用webmin
--name='bind' 容器名为bind
--restart=always 开机启动容器
--dns=127.0.0.1 配置容器的dns为127.0.0.1
--publish=172.17.42.1:53:53/udp 绑定udpip和端口
--publish=172.17.42.1:10000:10000  webmin图形化管理界面ip地址和端口
--volume=/srv/docker/bind:/data mounts /srv/docker/bind 存放docker持久化数据
--env='ROOT_PASSWORD=SecretPassword' 设置webminroot用户的登录密码为SecretPassword
 sameersbn/bind:9.16.1-20200524 镜像名和镜像tag
 -4 bind启动时用到的的参数表示只解析ipv4不解析ipv6,避免出现host unreachable resolving的情况

配置域名解析

浏览器打开 https://localhost:10000/ (请注意是HTTPS,忽略证书安全警告)进入Webmin页面,默认用户名密码是root和password。为了更方便使用,可以切换到中文。

docker 搭建dns docker dnspod_centos

默认你打开的页面可能和截图有些差异:“现有DNS区域” 一栏你会看到有一个根区域,用于解析互联网域名。纯粹私有网络,无互联网连接的情况下这个域可以删除。


点击创建一个主区域

docker 搭建dns docker dnspod_docker 搭建dns_02

以创建一个 “demo.com” 域为例:

docker 搭建dns docker dnspod_bind_03

下面是中文对应界面

docker 搭建dns docker dnspod_centos_04

选项说明:

  • 区域类型:正向 ,即名字解析到IP地址
  • 主服务器:默认填写的当前docker容器ID,最好改成 localhost. ,避免重启后失效. 因为我们只做私网解析,指向本地即可。

创建好主区域后,我们可以开始建立A记录了:

选择创建好的主区域,点击地址记录

docker 搭建dns docker dnspod_docker_05

填入名称为@,可以修改默认ttl时间,最后填入域名需要解析到的ip地址,点击右上角应用按钮使地址解析生效.

docker 搭建dns docker dnspod_docker 搭建dns_06


下图是中文界面对应

docker 搭建dns docker dnspod_linux_07

测试

直接在centos上输入host demo.com 127.0.0.1

出现下面的结果表示demo.com正常解析到192.168.11.11

[root@VM_0_14_centos ~]# host demo.com 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

demo.com has address 192.168.11.11

其中demo.com是域名,127.0.0.1是DNS服务器的ip地址

你还可以使用例如host www.baidu.com 127.0.0.1测试外网解析

[root@VM_0_14_centos ~]# host www.baidu.com 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 182.61.200.7
www.a.shifen.com has address 182.61.200.6

如果出错可以用docker logs -f bind命令查看bind容器运行日志

参考

1. sameersbn/bind2. 10分钟搭建起私有网络DNS Server3. Docker容器内不能联网的6种解决方案