【问题标题】:How do I set up a DNS container inside docker-compose?如何在 docker-compose 中设置 DNS 容器?
【发布时间】:2016-06-15 22:06:58
【问题描述】:

我认为这可能是一个 XY 问题,因此我将包含问题的上下文,因为我不知道解决此问题的最佳方法。

我在 AWS 上设置了一个 kubernetes 环境,因此我有两个部分,一个 nginx 容器和一个后端服务(我将其称为 SvcA)。由于后端服务可以来来去去,在我的 nginx 配置中,我有一些看起来像这样的东西:

resolver kube-dns.kube-system.svc.cluster.local valid=60s ipv6=off;

server {
   # stuff
   location / {
       set $backend "SvcA.default.svc.cluster.local:8000";
       proxy_pass http://$backend;
   }
}

此设置在 kubernetes 上运行良好,但我希望有一种方法可以在我的本地计算机上进行(几乎)完全相同的设置以进行测试/开发,但没有使用 kubernetes 的所有开销。我想要做的是将这两个容器(nginx、SvcA)粘贴到一个 docker-compose 文件中并让它以这种方式工作。我遇到的问题是,nginx 的解析器被硬编码为 kubernetes 上的 url,我认为可能可行的解决方案是拥有一个 dns 的容器,它的唯一入口是指向“ SvcA.default.svc.cluster.local" 到 docker-compose 分配的名称。

我不确定这是否是解决问题的最佳方法,如果是,我对 DNS 配置的了解不够,无法进行设置。这是我的问题的最佳解决方案吗?如果是,我将如何配置 dns 服务器来处理这个问题?

【问题讨论】:

    标签: nginx dns kubernetes docker-compose


    【解决方案1】:

    我不确定你是否需要 dns。

    即使 URL 是硬编码的,您也可以这样做 例如 docker-compose.yml

    version: '2'
    services:
      service1:
        ...
       networks:
         back-tier:
           ipv4_address: "172.16.238.10"
      service2:
        ...
        networks:
          back-tier:
            ipv4_adress: "172.16.238.11"
    networks:
      back-tier:
        driver: bridge
        ipam:
          driver: default
          config:
          - subnet: 172.16.238.0/24
            gateway: 172.16.238.1
    

    您甚至可以为每个容器设置主机名等,您还可以在它们之间建立链接。如果你需要它是循环的,你可以用 extra_hosts 参数来做。

    如果应该能够在此处找到您需要的所有信息: https://docs.docker.com/compose/compose-file/

    如果容器在同一个网络上,它们应该能够相互通信

    【讨论】:

    • 我知道可能会有更简单的方法。这让我大部分时间都在那里。您知道“127.0.0.11”是否始终是内部名称服务器的 ip? (我需要在 nginx 配置中为解析器创建一个“extra_hosts”条目,我找不到任何关于如何设置内部 dns ip 的文档)
    • 相信你可以在docker-compose.yml中使用以下参数docs.docker.com/v1.11/compose/compose-file/#dns
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 2023-01-24
    相关资源
    最近更新 更多