如何将Bind9 Docker容器配置为其他容器的DNS服务器
解决Docker容器指定静态IP Bind9 DNS及Traefik桥接通信问题
一、让Step-CA/Traefik稳定指向Bind9静态IP作为DNS
方法1:全局配置所有Docker容器默认DNS
- 编辑Docker守护进程配置文件:
vi /etc/docker/daemon.json - 添加Bind9的静态IP到DNS列表(替换
192.168.0.X为你的Bind9实际静态IP):{ "dns": ["192.168.0.X"] } - 重启Docker服务生效:
之后新启动的所有容器都会默认使用该DNS,包括Step-CA和Traefik。systemctl restart docker
方法2:单独为Step-CA/Traefik指定DNS(不影响全局)
针对docker run启动的容器:
启动时添加--dns参数:
# Step-CA示例 docker run --dns 192.168.0.X [其他启动参数] step-ca-image # Traefik示例 docker run --dns 192.168.0.X [其他启动参数] traefik-image
针对docker-compose部署的容器:
在服务配置中添加dns字段:
services: step-ca: image: step-ca-image dns: - 192.168.0.X # 其他Step-CA配置 traefik: image: traefik-image dns: - 192.168.0.X # 其他Traefik配置
二、让Traefik与br0桥接网络的容器通信
方式1:将Traefik加入已有的br0桥接网络
如果br0是Docker管理的外部桥接网络,在启动Traefik时指定该网络:
docker run方式:
docker run --network br0 [其他启动参数] traefik-image
docker-compose方式:
services: traefik: image: traefik-image networks: - br0 # 其他Traefik配置 networks: br0: external: true name: br0
方式2:让Traefik使用host网络(如果br0是宿主机的物理桥接)
如果br0是宿主机的物理桥接接口,可让Traefik直接使用host网络模式,这样它能直接访问宿主机桥接网络上的所有设备:
# docker run示例 docker run --network host [其他启动参数] traefik-image
# docker-compose示例 services: traefik: image: traefik-image network_mode: host # 其他Traefik配置
验证配置
进入Step-CA容器,测试私有域名解析:
docker exec -it step-ca-container-name nslookup 你的私有域名若返回正确的Unraid服务器IP,说明DNS配置生效。
进入Traefik容器,测试与br0上容器的连通性:
docker exec -it traefik-container-name curl http://br0-container-ip:容器端口若能正常返回内容,说明网络通信正常。
内容的提问来源于stack exchange,提问作者Brandon Piña
相关产品推荐
相关产品推荐

