如何在docker-compose中设置DNS容器?

时间:2016-06-15 22:06:58

标签: nginx dns kubernetes docker-compose

我认为这可能是一个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服务器来处理这个?

1 个答案:

答案 0 :(得分: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/

如果容器在同一网络上,他们应该能够彼此交谈