首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将bind9停靠容器设置为其他容器的dns

如何将bind9停靠容器设置为其他容器的dns
EN

Stack Overflow用户
提问于 2022-08-03 20:42:57
回答 1查看 407关注 0票数 -1

我正在尝试为我的家庭网络设置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上的容器对话,否则它将无法将请求代理到容器

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-03 21:46:14

你的容器的地址不需要是短暂的。我们可以使用networks top-level element建立一个自定义网络,它使用ipam option为网络定义一个静态范围,然后我们可以在这个网络上分配容器静态地址。

我们可以使用dns option将容器配置为使用bind9容器进行名称解析。

下面是一个示例docker-compose.yaml,它设置了一个bind9容器和几个用于DNS的附加容器:

代码语言:javascript
复制
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配置为服务于以下区域文件:

代码语言:javascript
复制
$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

web1web2容器中,我们可以确认它们正在使用bind实例进行名称解析:

代码语言:javascript
复制
/ $ 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选项),就可以在主机上发布适当的端口:

代码语言:javascript
复制
  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.10
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73227593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档