关于Docker部署Bind9权威DNS服务器的卷挂载与配置文件的疑问
关于Docker部署Bind9权威DNS服务器的卷挂载与配置文件的疑问
Hey there, let's break down your questions one by one to get you sorted with Bind9 in Docker!
1. 我们需要在Dockerfile所在目录创建对应的目录树吗?
不需要哦,你完全没必要把这些目录特意建在Dockerfile的同文件夹里。文档里说的是容器内部需要持久化存储的路径(这样你的配置、缓存、区域文件和日志才不会在容器重启后丢失)。
你只需要在宿主机上的任意合适位置准备好这些目录就行(或者用Docker管理的卷)。比如你给出的示例命令用了/home/homie/bind9-with-volumes/config_files,哪怕这个路径离Dockerfile十万八千里也没关系。核心是用-v参数把宿主机目录和容器内的对应路径映射起来。
2. "权威DNS服务器"部分的配置语法应该放到named.conf.local还是named.conf.options?
我大概率会选named.conf.local,原因如下:
named.conf.options一般用来放全局服务器设置(比如文档里提到的directory路径、转发器、递归规则这类)。named.conf.local是定义权威区域(也就是zone "example.com" { ... }这类块)的标准位置。把区域专属配置和全局选项分开,后续维护起来会清晰很多。
如果你拿不准,可以去容器里看主配置文件named.conf,它通常会用include指令同时引入named.conf.options和named.conf.local,跟着这个结构走准没错。
3. 我们能用Dockerfile指令完成卷挂载,还是必须在创建容器时操作?
这个问题问得好!咱们来理清两者的区别:
- Dockerfile里的
VOLUME指令只是声明容器内的这些路径需要作为持久化卷,它不会自动绑定到宿主机的特定目录——如果不额外指定,Docker会自动创建一个随机的管理卷来对应这些路径。 - 如果你想挂载自定义的宿主机目录(就像你示例里那样),必须在启动容器时用
-v参数(或者在docker-compose.yml里定义卷)。这是把宿主机的配置/区域文件直接映射进容器的唯一方式。
你给出的示例命令:
docker run -idt -v /home/homie/bind9-with-volumes/config_files:/var/lib/bind
就是正确的做法——你明确把宿主机的配置目录链接到了容器内的/var/lib/bind路径(也就是文档里说的存放二级区域的位置)。如果还想持久化其他路径(/etc/bind、/var/cache/bind、/var/log),只要再加几个-v参数就行。
备注:内容来源于stack exchange,提问作者mr.zog
相关产品推荐
相关产品推荐

