无法对 "external" DNS 服务器进行任何 DNS 查询?

Can't make any DNS lookups to "external" DNS servers?

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

这是有问题的撰写文件(精简为相关内容):

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

它部署得很好,直到我必须做 任何需要 "external" DNS 请求的事情
例如。在我的容器中,我手动 运行 curl https://www.google.com.
这导致以下错误

curl: (6) Could not resolve host: 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)。 我的防火墙没有阻止任何东西。

尝试通过添加

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

添加这个

后,看看 curl 现在是否正在解析 google

这是一个 "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