2017-04-24 77 views
1

我想在docker容器内运行apt(在virtualbox上运行),但由于我在代理之后,因此无法运行。在代理服务器后面的流浪者中使用docker

我用的无业游民,proxyconf,让无业游民机器本身连接到互联网,它工作得很好:

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

但是,这些设置都没有得到贯彻,以Docker容器开始颠沛流离的机器内。当我开始一个基于Debian的搬运工容器

docker run -it debian /bin/bash 

,并在bash中我跑

apt-get update 

那么容易无法建立连接。我可以通过添加以下到我的Dockerfile

ENV http_proxy <myproxy> 

但调整所有Dockerfile的会很麻烦解决这个问题,我不想硬编码我的代理到Dockerfile的本身,因为这些也以不同的使用建立。

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

然而,这似乎不会对代理的任何效果泊坞窗容器内易于使用。

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

回答

1

您可以添加将它们作为参数添加到docker build命令中的变量。这样它就可以工作,代理ip不会在Dockerfile上。通过这种方式:

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

然后在Dockerfile您必须设置VAR作为参数:

ARG http_proxy 

自动VAR能够以这种方式被使用:

RUN echo ${http_proxy} 

但在你的情况你不需要使用它,只需要设置代理变量足以在构建过程中使用。

此技术也可能非常有用,以避免在Dockerfiles上写入密码。

希望它有帮助

相关问题