Docker 客户端上的代理配置后 docker 容器内没有 http/https 连接

No http/https connectivity inside docker container after proxy configuration on Docker client

我遵循了如何为容器配置代理的 Docker guide。所以我把下面的内容放在 ~/.docker/config.json

{
   (...),
   "proxies":{
      "default":{
         "httpProxy":"http://127.0.0.1:8080",
         "httpsProxy":"http://127.0.0.1:8080",
      }
   }
}

并运行

sudo systemctl daemon-reload

sudo systemctl restart docker

主机中,我在127.0.0.1:8080地址启动了代理(mitmproxy)。代理看起来在主机中正常工作。但是,当我在容器中连接时,它似乎无法正确使用代理。

docker exec -it my_container_1 /bin/bash

在bash中:

bash-5.0#  wget http://google.com
wget: can't connect to remote host (127.0.0.1): Connection refused

如果我使用 ping 或某些 ftp 地址,它可以正常工作,所以它受限于代理配置。

有什么想法吗?

config.json中定义的http_proxyhttps_proxy由docker客户端传递给容器。这实际上在容器中设置了 http_proxyhttps_proxy 环境变量。 运行 echo $http_proxy 在容器中会输出值。

假设主机上的代理配置正确,代理的IP地址应该是容器看到的主机IP。 将 config.json 127.0.0.1 中的 IP 替换为主机的 docker0 或主网络接口 (eth0) 的 IP。