从代理容器可访问目标时,Nerdctl中Nginx代理管理器的网关错误

vyu0f0g1  于 2023-04-11  发布在  Nginx
关注(0)|答案(1)|浏览(169)

我有Nginx Poxy Manager和一个helloworld-http容器在同一个桥接网络中运行。
代理主机已经为某些域设置为访问代理服务器,并且它被配置为访问桥接网络内的hello服务器。

在运行代理的容器内,目标是可到达的,响应确认系统名称:

虽然为代理生成的nginx配置看起来也是正确的:
/data/nginx/proxy_host/2.conf

server {
  set $forward_scheme http;
  set $server         "hello";
  set $port           80;

  listen 80;
listen [::]:80;

  server_name somedomainbeingused.com;

我发现这个question声明主机必须有一个index.html,并确认测试服务器也会对此做出响应
我甚至检查了浏览器没有自动更新协议到https。
所有的星星似乎都在这里排成一行,我错过了什么?
编辑:经过进一步审查,我已经检查了日志,它似乎很好奇。

0000/00/00 00:00:00 [error] 97162#97162: *1575 hello could not be resolved (3: H
ost not found), client: 10.4.2.1, server: somedomainbeingused.com, request: "GET 
/ HTTP/1.1", host: "somedomainbeingused.com"

这个错误没有意义的地方是我已经确认了主机(hello)可以从托管代理的容器(生成日志的地方)访问。

xu3bshqb

xu3bshqb1#

所以,这不起作用的原因是因为Docker / Nerdctl中的网络工作方式。对于所有桥接网络,都有一个内部DNS解析器。在Docker中,这通常是127.0.0.11,但无论如何,它都会写入容器中的/etc/resolv.conf,以便系统和服务使用此解析器。Ngingx会这样做,但是在Nerdctl中(这就是管理我的容器的东西)解析器只解析网络外部的dns………这在大多数情况下是透明的,因为Nerdctl会将完整的网络配置写入hosts文件中,所以当你使用curl时,首先使用hosts而不是外部解析器,除非你是Nginx.........并且你只使用解析器。
(解释的上下文)
因此,solution似乎是安装Dnsmasq从Nginx的主机读取并在/etc/resolv.conf中设置它。

相关问题