背景:
前期用pyhon写的一个软件来做dns域名劫持,dig响应正常,解析正常,但同事监控机经常报警,dns响应时间占比在四分之三,经过一番折腾,还是这个软件的事情,所以单独给同事搭建了一台dns私网服务器,为了便捷快速搭建完成,选择了sameersbn/bind镜像。
服务器:CentOS 8.2.2004
Docker引擎版本:19.03.12(使用非root用户运行)
搭建过程:
docker pull sameersbn/bind
启动过程
docker run --name='bind' -d -p 53:53/udp -e WEBMIN_ENABLED=false -v /named:/data sameersbn/bind:latest
我不用WEB来配置bind,所以就把WEB服务关了,/named目录(也可为其它目录)为数据目录,新建容器后将在该目录下生成bind/ect和bind/lib目录,其中etc目录下为DNS的相关配置文件。配置和配置其他bind服务器一致,就不在这里表述了。下面主要说说碰到的问题。
碰到的问题(很重要,说的人很少,但是能节省你的大部分时间,因为我已经以身试法了)
1、需要提前在主机上建立工作目录 /named
2、不需要关闭主机防火墙,docker启动镜像的时候会自动开通防火墙访问规则
3、报chcon: can’t apply partial context to unlabeled file 错误是因为我们关闭了selinux,需要恢复原状,即修改/etc/selinux/config文件,修改为SELINUX=enforcing,修改后必须重启服务器
4、很多人没说过的docker加载目录权限问题,我们第一次使用
发现容器竟然自动退出了,然后我们要知道发生了什么,使用
报错如下
mkdir: cannot create directory ‘/named/bind’: Permission denied
找了很多教程,没有人说过原因,在github上找到了问题的原因
https://github.com/sameersbn/docker-bind/issues/15
在执行docker run命令之前,需要做如下操作
chcon -Rt svirt_sandbox_file_t /named
执行后就可以正常启动容器了。