gpt4 book ai didi

docker - 使用主机上的领事 DNS 解析容器

转载 作者:IT老高 更新时间:2023-10-28 21:21:26 27 4
gpt4 key购买 nike

目的:获取一个docker容器,使用宿主机提供的DNS,它是运行在另一个容器中的consul代理,通过traefik反向代理访问可用的服务。

设置主机:Ubuntu 16.04.2 LTS

Registrator 向 consul 代理注册新容器,traefik 是反向代理,用于负载平衡服务并使其可用。当您点击“/”路径时,有一个通用节点应用程序会返回“Hello World”

容器 1。

docker run -d --net=host consul agent -dev

容器 2。

docker run -d  --name=registrator --net=host --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest consul://localhost:8500

容器 3。

docker run -d --net=host -p 8089:8080 -p 80:80 --name=traefik -v ~/projects/traefix/docker.toml:/etc/traefik/traefik.toml traefik

容器 4。

docker run -P -d meep/node-web-app

使用网络管理器的主机

主机已设置,因此任何对 consul TLD 的查找都将解析为 consul docker 容器

/etc/NetworkManager/dnsmasq.d/10-consul
server=/consul/127.0.0.1#8600

我的/etc/NetworkManager/dnsmasq.d/docker-bridge.conf 具有以下配置,这意味着它将监听 docker 网络接口(interface)上的 DNS 请求。

listen-address=172.17.0.1

目前在我的主机上,我可以执行以下操作

  1. dig node-web-app.service.consul 返回127.0.0.1的ip地址
  2. curl http://node-web-app.service.consul/返回“Hello World”

到目前为止,主机上的一切都很好。

我启动了一个类似的容器

docker run --dns=172.17.0.1 -it joffotron/docker-net-tools

并运行 dig node-web-app.service.consul 它返回 127.0.0.1,至少 dns 部分工作。显然,如果我现在运行 curl http://node-web-app.service.consul/当 dns 查找指向 127.0.0.1 时,它将中断,而它应该指向 172.17.0.1

请原谅,我并没有真正使用过 docker + 服务发现那么我该怎么做才能使容器 DNS 正确指向 172.17.0.1

最佳答案

容器 4 未使用与其他容器相同的网络(--net=host),因此您的 DNS 无法在所有情况下工作。

要么:

  • 你在物理机网络上,你必须使用它的容器 IP 来寻址 node-web-app
  • 你在一个 docker 网络中,你必须获得你机器的可路由 IP。

dig 返回 127.0.0.1 的事实是完全正常的,因为这是你告诉他的,但你的 node-web-app 无法在 127.0.0.1 访问(在这种情况下,这是这个特定的本地 IP docker 容器)来自 dig 容器。

关于docker - 使用主机上的领事 DNS 解析容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45445090/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com