在代理服务器后面使用docker

我想从一个docker容器中运行apt(在virtualbox上运行),但是这个失败了,因为我在代理之后。

我使用vagrant-proxyconf允许stream浪机器本身连接到互联网,这工作正常:

if Vagrant.has_plugin?("vagrant-proxyconf") config.proxy.http = ... config.proxy.https = ... config.proxy.no_proxy = "localhost,127.0.0.1,.example.com" end 

但是,这些设置不会通过stream浪者机器中启动的docker容器。 当我启动一个基于debian的docker容器时

 docker run -it debian /bin/bash 

并在bash中运行

 apt-get update 

那么apt就不能build立连接。 我可以通过将以下内容添加到我的Dockerfile来解决此问题

 ENV http_proxy <myproxy> 

但是调整所有的Dockerfile会很麻烦,而且我不想将我的代理硬编码到Dockerfile本身,因为这些代码也在不同的设置中使用。

我也试过告诉docker使用什么代理: https : //docs.docker.com/engine/admin/systemd/

但是,这看起来没有任何影响在Docker容器内使用的代理。

有没有办法将http_proxy环境variables默认传递给我的机器内启动的所有docker容器? 另外,是否可以将vagrant / virtualboxconfiguration为“仿真”“无代理”互联网连接,以便我不必通过所有虚拟化层访问代理设置?

你可以在docker build命令中添加将它们作为参数的variables。 这样,它将工作,代理IP将不在Dockerfile上。 通过这种方式:

 docker build -t --build-arg http_proxy="http://yourIp" yourImage 

然后在Dockerfile上,你必须设置var作为参数:

 ARG http_proxy 

自动var可以这样使用:

 RUN echo ${http_proxy} 

但在你的情况下,你不需要使用它,只需要设置代理var就足够在构build过程中使用了。

为了避免在Dockerfiles上写密码,这种技术也是非常有用的。

希望能帮助到你