Docker 网络 Nginx 解析器

新手上路,请多包涵

我正在尝试摆脱配置中已弃用的 Docker 链接。剩下的就是在我重新创建容器时摆脱那些 Bad Gateway nginx 反向代理错误。

注意:我在桥接模式下使用 Docker 网络。 ( docker network create nettest

我在 nginx 中使用以下配置片段:

 location / {
      resolver 127.0.0.1 valid=30s;
      set $backend "http://confluence:8090";
      proxy_pass $backend;

  1. 我在名为 --- 的 Docker 网络上启动了一个主机名为 nettest confluence 容器。
  2. 然后我在网络上启动了 nginx 容器 nettest
  3. 我可以从 nginx 容器内部 ping confluence
  4. confluence 列在 nginx 容器的 /etc/hosts 文件中
  5. nginx日志说 send() failed (111: Connection refused) while resolving, resolver: 127.0.0.1:53
  6. 我尝试了 docker network default dns resolver 127.0.0.11 from /etc/resol.conf
  7. nginx日志说 confluence could not be resolved (3: Host not found)

任何人都知道如何使用 Docker Networks 配置 nginx 解析器,或者如何强制 Nginx 正确解析 Docker 网络主机名的替代方法?

原文由 blacklabelops 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

首先,您应该在 127.0.0.11 使用 Docker 嵌入式 DNS 服务器。

您的问题可能是由以下其中一项引起的:

  1. nginx 正在尝试使用 IPv6(AAAA 记录)进行 DNS 查询。

有关解决方案,请参阅 https://stackoverflow.com/a/35516395/1529493

基本上是这样的:

    http {
       resolver 127.0.0.11 ipv6=off;
   }

这可能不再是 Docker 1.11 的问题:

修复不将 docker 域 IPv6 查询转发到外部服务器 ( #21396 )

  1. 注意不要意外覆盖 resolver 配置指令。 In my case I had in the server block resolver 8.8.8.8 8.8.4.4; from Mozilla’s SSL Configuration Generator , which was overriding the resolver 127.0.0.11; in the http block.这让我挠了很久……

原文由 Teoh Han Hui 发布,翻译遵循 CC BY-SA 3.0 许可协议

也许你应该检查你的容器的 /etc/resolv.conf

它显示您容器的正确 DNS 配置,然后使用该 DNS 服务器 IP 进行解析。

127.0.0.11 在 Rancher 中不起作用

原文由 exiaohao 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题