无法对“外部” DNS服务器进行任何DNS查找?

时间:2019-02-24 10:11:21

标签: docker networking dns docker-swarm docker-stack

过去几周,我一直在尝试修复Docker堆栈中的错误,但无济于事。

这是有问题的撰写文件(深入到相关内容):

version: '3.7'
services:
  php:
    ...
    dns:
      - 1.1.1.1
      - 1.0.0.1
networks:
  default:
    internal: true
      driver: overlay

它可以很好地部署,直到我必须执行需要“外部” DNS请求的任何 为止。
例如。在我的容器中,我手动运行curl https://www.google.com
这将导致以下错误

  

卷曲:(6)无法解析主机:google.com

这是我的/etc/resolv.conf在容器内的内容:

search finlaydag33k.nl
nameserver 127.0.0.11
options ndots:0

运行docker inspect -f '{{.HostConfig.DNS}}' container-id会产生以下输出:

  

[1.1.1.1 1.0.0.1]

我的问题是,我做错了什么,该如何解决? 它可以通过dns名称到达同一堆栈内的服务,而不能到达需要和外部DNS的域(如1.1.1.18.8.8.8)。 我的防火墙没有阻止蜂。

2 个答案:

答案 0 :(得分:0)

尝试通过添加

将DNS转发器添加到“ /etc/resolv.conf”
  server=8.8.8.8
  server=1.1.1.1

查看添加后的curl是否可以解析google

答案 1 :(得分:0)

这是个“ doh”时刻。
显然(尽管我在文档中找不到此容器),但容器仅连接到default网络,这是一个overlay网络。
这意味着必须向该容器显式添加一个bridge网络(应该已经存在于您的集群中)(并且还必须将其显式地钩接到default网络中,以便它可以与其中的其他容器通信堆栈)。

这没有记录,所以我认为它已经可以到达外面了。
defaultbridge网络手动添加到容器后,一切正常。

version: '3.7'
services:
  php:
    ...
    networks:
      - default
      - bridge
    dns:
      - 1.1.1.1
      - 1.0.0.1
networks:
  default:
    internal: true
      driver: overlay
  bridge:
    external: true