我正在尝试在私有 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?
感谢您的帮助!