在代理后面的vagrant中使用docker

时间:2017-04-24 14:13:07

标签: docker proxy vagrant http-proxy

我想从一个docker容器内,在一个vagrant机器(在virtualbox上运行)中运行apt,但是由于我在代理后面而失败了。

我使用vagrant-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

但是,这些设置不会在流浪者机器内启动的泊坞容器中进行。当我用

启动基于debian的docker容器时
docker run -it debian /bin/bash

在bash中我运行

apt-get update
然后才能建立连接。我可以通过将以下内容添加到我的Dockerfile

来解决此问题
ENV http_proxy <myproxy>

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

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

但是,这似乎对apt在docker容器中使用的代理没有任何影响。

是否有办法将http_proxy环境变量传递给默认情况下在我的计算机内启动的所有docker容器?或者,是否可以将vagrant / virtualbox配置为&#34;模拟&#34; a&#34;无代理&#34;互联网连接,以便我不必通过所有虚拟化层到达代理设置?

1 个答案:

答案 0 :(得分: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}

但是在你的情况下你不需要使用它,只有设置代理var就足以在构建期间使用。

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

希望有所帮助