如何让 conda 在 Docker 容器内使用主机代理

如何让 conda 在 Docker 容器内使用主机代理

情况是这样的。我正在使用Docker使用 continuumio/anaconda3 镜像。我的服务器(Ubuntu 16.04 LTS)配置为使用公司代理使用 CNTLM 包。通过本地代理,互联网在主机上正常运行。

我还修改了 cntlm.conf 以监听 172.17.0.1 上的 Docker 虚拟网络接口 (docker0)。

Docker 也配置正确,我可以毫无问题地提取图像。一旦我使用 Anaconda 映像部署容器,并通过导出环境变量http_proxy="http://172.17.0.1:3128"等将容器配置为使用主机代理,我就可以使用wgetcurl下载。

问题来了conda。我按照文档操作,还导出了HTTP_PROXYHTTPS_PROXY变量。这不起作用。然后我在目录中创建了一个.condarc文件,其中包含:/root

proxy_servers:
  https: localhost:3128
  http: localhost:3128

也试过了ssl_verify: False

似乎没有什么效果。我总是得到以下错误:

CondaHTTPError: HTTP None None for url <https://repo.continuum.io/pkgs/free/linux-64/repodata.json.bz2>
Elapsed: None

An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.
ProxyError(MaxRetryError("HTTPSConnectionPool(host='repo.continuum.io', port=443): Max retries exceeded with url: /pkgs/free/linux-64/repodata.json.bz2 (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fd88e1d1240>: Failed to establish a new connection: [Errno 111] Connection refused',)))",),)

答案1

尝试在 Dockerfile 上创建这些变量:

ENV http_proxy="x.x.x.x:xxxx"
ENV https_proxy="x.x.x.x:xxxx"

那个 xxxx 不是 127.0.0.1。那个 ip 应该是 cntlm 代理的标准 LAN ip。

相关内容