我想从一个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;互联网连接,以便我不必通过所有虚拟化层到达代理设置?
答案 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上写入密码。
希望有所帮助