在docker容器中使用consul的DNS接口

在docker容器中使用consul的DNS接口

我的主机上运行着一个 consul 代理,docker 容器中运行着几个服务。我使用“gliderlabs/registrator”来发现这些服务,并将它们注册到本地 consul 代理中。

领事代理配置为接受来自各处的连接("client_addr": "0.0.0.0"选项),我可以通过dig @172.17.42.1 -p 8600 someservice.service.consul从主机执行来“证明”。

问题是我似乎无法在容器内执行相同的操作,挖掘请求超时,我curl也无法执行。我确实通过了--dns 172.17.42.1。有什么想法吗?

注意:如果可能的话我想避免使用--net=host

谢谢!

答案1

我遇到了同样的障碍,您的设置和我的设置看起来非常相似(我运行的是独立 Consul,而不是作为 Docker 容器运行)。

我也反对使用--net=host!!!。

对我来说,让它起作用的原因是:

A)我已经config.json为 Consul 创建了一个,并且在其中设置了ports.dsn使用端口 53(DNS 默认值)的属性。

您不能在 Docker 容器内使用 8600,这是因为参数docker run --dns不允许您提供端口。

b)我已使用主机的 LAN(私有)IP 作为--dns值。我之前尝试过其他值(0.0.0.0、公共 IP 和127.0.0.1),但这些都不行。

C)可选:您可以添加--dns-search="service.consul"docker run以便您可以拥有更短的域名(即避免必须写该service.consul部分)。

一旦进入容器,您就可以执行nslookup ubuntu.service.consul所提供的该容器的服务名称。

重要笔记

  • 您需要在容器上公开端口(即-P或标志)以便接收它们。如果您不共享端口,则会默默忽略该容器。-pregistratorregistrator
  • 设置主机名(使用标志)很好-h

希望这可以帮助!

相关内容