1

在过去的几周里,我正在尝试修复我的 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.
这会导致以下错误

curl:(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.1or 8.8.8.8)的域。我的防火墙没有阻止任何东西。

4

2 回答 2

1

这是一个有点“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
于 2019-02-25T12:47:08.787 回答
0

尝试通过添加将 DNS 转发器添加到“/etc/resolv.conf”

  server=8.8.8.8
  server=1.1.1.1

添加此内容后,查看 curl 现在是否正在解析 google

于 2019-02-25T12:47:04.067 回答