我正在尝试为我的家庭网络设置ssl,并且我已经设置了一个带有指向unraid服务器的自定义域的bind9容器。到目前一切尚好。我还设置了一个私有的step-ca证书颁发机构,它需要将dns设置为bind9容器,以便它知道我的私有域。如果我将step容器的dns设置为绑定容器的内部停靠器ip地址,但是由于这些ip地址是短暂的,所以我不能依赖这一点,因此我不能将bind9 ip地址绑定到192.168.0.1/24中的某个东西并在那里访问它。如果我将我的pc的dns服务器设置为bind9容器,但由于某种原因,我无法对其他坞容器这样做,则此操作有效。
简而言之,step-ca和我的代理traefik需要将它们的dns设置为bind9,我希望在192.168.0.1/24子网上设置一个静态ip地址。traefik还需要能够与桥接网络br0上的容器对话,否则它将无法将请求代理到容器
发布于 2022-08-03 21:46:14
你的容器的地址不需要是短暂的。我们可以使用networks top-level element建立一个自定义网络,它使用ipam option为网络定义一个静态范围,然后我们可以在这个网络上分配容器静态地址。
我们可以使用dns option将容器配置为使用bind9容器进行名称解析。
下面是一个示例docker-compose.yaml,它设置了一个bind9容器和几个用于DNS的附加容器:
version: "3"
services:
bind9:
image: docker.io/internetsystemsconsortium/bind9:9.19
volumes:
- "./bind:/etc/bind"
- bind9_cache:/var/cache/bind
- bind9_log:/var/log
- bind9_lib:/var/lib/bind
networks:
bind9:
ipv4_address: 192.168.133.10
web1:
image: docker.io/alpinelinux/darkhttpd:latest
networks:
bind9:
ipv4_address: 192.168.133.20
dns: 192.168.133.10
web2:
image: docker.io/alpinelinux/darkhttpd:latest
networks:
bind9:
ipv4_address: 192.168.133.21
dns: 192.168.133.10
networks:
bind9:
ipam:
driver: default
config:
- subnet: 192.168.133.0/24
gateway: 192.168.133.1
volumes:
bind9_cache:
bind9_lib:
bind9_log:在bind目录中,bind配置为服务于以下区域文件:
$TTL 604800
@ IN SOA docker.example. root.docker.example. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.docker.example.
ns IN A 192.168.133.10
web1 IN A 192.168.133.20
web2 IN A 192.168.133.21
web IN A 192.168.133.20
web IN A 192.168.133.21在web1或web2容器中,我们可以确认它们正在使用bind实例进行名称解析:
/ $ wget -O- web1.docker.example:8080
Connecting to web1.docker.example:8080 (192.168.133.20:8080)
writing to stdout
<html>
.
.
.
</html>回想一下,docker-compose只是docker run的一个漂亮的包装器,所以您可以在不使用docker-compose的情况下完成同样的任务(尽管它当然会使生活变得更容易)。
如果您需要访问bind9容器,您当然只需将必要的ports部分添加到撰写配置中(或者在docker run命令行上使用--publish/-p选项),就可以在主机上发布适当的端口:
bind9:
image: docker.io/internetsystemsconsortium/bind9:9.19
ports:
- "53:53/udp"
- "53:53/tcp"
volumes:
- "./bind:/etc/bind"
- bind9_cache:/var/cache/bind
- bind9_log:/var/log
- bind9_lib:/var/lib/bind
networks:
bind9:
ipv4_address: 192.168.133.10https://stackoverflow.com/questions/73227593
复制相似问题