squid 代理后面的 Docker 容器不使用代理 DNS

squid 代理后面的 Docker 容器不使用代理 DNS

我正在尝试在私有 NAT 中设置 VM,以使用在网关 VM 上运行的 squid 代理访问互联网。

我已通过在文件中设置http_proxy来将内部 VM 配置为使用代理。这在直接在 VM 上运行 curl 命令时有效(精简输出):https_proxy/etc/environment

 curl -v google.com
* Uses proxy env variable no_proxy == '127.0.0.1'
* Uses proxy env variable http_proxy == 'http://xxx.xxx.xxx.xxx:3128'
*   Trying xxx.xxx.xxx.xxx:3128...
* TCP_NODELAY set
* Connected to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx) port 3128 (#0)
> GET http://google.com/ HTTP/1.1
> Host: google.com
> User-Agent: curl/7.68.0
> Accept: */*
> Proxy-Connection: Keep-Alive
>
...
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

我还使用与我配置相同的代理变量(通过/etc/systemd/system/docker.service.d/proxy.conf)配置了docker daemon,并且docker似乎配置正确,这里是精简的输出docker system info

...
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http://xxx.xxx.xxx.xxx:3128
 HTTPS Proxy: http://xxx.xxx.xxx.xxx:3128
 No Proxy: localhost,127.0.0.1,::1
...

我现在面临的问题是,在我们的用例所需的 docker 容器中,似乎没有使用完整代理或代理的 DNS。我从使用上述配置运行的容器中获得以下输出,并将额外的HTTP_PROXY环境变量传递给curlimages/curl图像。

/ $ echo $HTTP_PROXY
http://xxx.xxx.xxx.xxx:3128
/ $ curl -v google.com
* Could not resolve host: google.com
* Closing connection 0
curl: (6) Could not resolve host: google.com

另外,当我检查 squid 访问日志时,我只看到直接来自 VM 的请求,而看不到来自容器内部的请求,因此似乎请求甚至没有离开容器。

我可以为 docker 进行其他任何 DNS 配置吗? 有没有其他方法可以检查 docker 是否使用了代理/DNS?

感谢您的帮助!

相关内容