如何在 docker-compose 中设置 DNS 容器?
How do I set up a DNS container inside 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 上运行良好,但我想要一种方法在我的本地计算机上为 testing/development 进行(几乎)完全相同的设置,但没有使用 kubernetes 的所有开销。我想要做的是将这两个容器(nginx、SvcA)粘贴到一个 docker-compose 文件中,并让它以这种方式工作。我遇到的问题 运行 是 nginx 的解析器被硬编码为 kubernetes 上的 url,我认为可能有效的解决方案是让容器成为 dns,它的唯一入口是将 "SvcA.default.svc.cluster.local" 指向名称 docker-compose assigns.
我不确定这是否是解决问题的最佳方法,如果是,我对 DNS 配置的了解还不够多,无法进行设置。这是我的问题的最佳解决方案吗?如果是,我将如何配置 dns 服务器来处理这个问题?
我不确定你是否需要 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
你甚至可以为每个容器设置主机名等,你也可以在它们之间创建一个link。如果你需要它是循环的,你可以用 extra_hosts 参数来做。
如果您应该可以在这里找到您需要的所有信息:
https://docs.docker.com/compose/compose-file/
如果容器在同一网络上,它们应该能够相互通信
我认为这可能是一个 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 上运行良好,但我想要一种方法在我的本地计算机上为 testing/development 进行(几乎)完全相同的设置,但没有使用 kubernetes 的所有开销。我想要做的是将这两个容器(nginx、SvcA)粘贴到一个 docker-compose 文件中,并让它以这种方式工作。我遇到的问题 运行 是 nginx 的解析器被硬编码为 kubernetes 上的 url,我认为可能有效的解决方案是让容器成为 dns,它的唯一入口是将 "SvcA.default.svc.cluster.local" 指向名称 docker-compose assigns.
我不确定这是否是解决问题的最佳方法,如果是,我对 DNS 配置的了解还不够多,无法进行设置。这是我的问题的最佳解决方案吗?如果是,我将如何配置 dns 服务器来处理这个问题?
我不确定你是否需要 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
你甚至可以为每个容器设置主机名等,你也可以在它们之间创建一个link。如果你需要它是循环的,你可以用 extra_hosts 参数来做。
如果您应该可以在这里找到您需要的所有信息: https://docs.docker.com/compose/compose-file/
如果容器在同一网络上,它们应该能够相互通信