使用主机

时间:2017-08-01 18:19:27

标签: docker dns consul

目标:获取一个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

使用网络管理器的主机

主机已设置好,因此任何查询领事TLD都将解析为领事泊坞容器

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

我的/etc/NetworkManager/dnsmasq.d/docker-bridge.conf包含以下配置,这意味着它将在docker网络接口上侦听DNS请求。

listen-address=172.17.0.1

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

  1. dig node-web-app.service.consul返回错误地址127.0.0.1
  2. curl http://node-web-app.service.consul/返回' Hello World'
  3. 到目前为止,在主机上工作的一切都很好。

    我启动了一个像

    这样的容器
    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

1 个答案:

答案 0 :(得分:-1)

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

或者:

  • 您在物理机网络上,并且必须使用它的容器IP来处理node-web-app
  • 您位于泊坞网络中,您必须获得机器的可路由IP。

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