Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在代理后面的vagrant中使用docker_Docker_Proxy_Vagrant_Http Proxy - Fatal编程技术网

在代理后面的vagrant中使用docker

在代理后面的vagrant中使用docker,docker,proxy,vagrant,http-proxy,Docker,Proxy,Vagrant,Http Proxy,我想在docker容器中运行apt,在virtualbox上运行的流浪机器中运行apt,但这失败了,因为我在代理后面 我使用vagrant proxyconf允许vagrant机器本身连接到internet,这很好: if Vagrant.has_plugin?("vagrant-proxyconf") config.proxy.http = ... config.proxy.https = ... config.proxy.no_proxy = "localhost,

我想在docker容器中运行apt,在virtualbox上运行的流浪机器中运行apt,但这失败了,因为我在代理后面

我使用vagrant proxyconf允许vagrant机器本身连接到internet,这很好:

if Vagrant.has_plugin?("vagrant-proxyconf")
  config.proxy.http     = ...
  config.proxy.https    = ...
  config.proxy.no_proxy = "localhost,127.0.0.1,.example.com"
end
但是,这些设置不会执行到vagrant机器中启动的docker容器。当我启动一个基于debian的docker容器时

docker run -it debian /bin/bash
我在狂欢中奔跑

apt-get update
那么apt无法建立连接。我可以通过在Dockerfile中添加以下内容来解决此问题

ENV http_proxy <myproxy>
但是调整所有Dockerfile会很麻烦,我不希望将我的代理硬编码到Dockerfile中,因为它们也用于不同的设置中

我还尝试告诉docker使用什么代理:

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


有没有办法将http_proxy环境变量传递给默认情况下在我的机器中启动的所有docker容器?或者,是否可以将vagrant/virtualbox配置为模拟proxyless internet连接,这样我就不必通过所有虚拟化层访问代理设置?

您可以在docker build命令中添加将其作为参数传递的变量。这样它就可以工作了,代理ip就不在Dockerfile上了。这样:

docker build -t --build-arg http_proxy="http://yourIp" yourImage 
RUN echo ${http_proxy}
然后在Dockerfile上,必须将var设置为参数:

ARG http_proxy
自动地,var可以这样使用:

docker build -t --build-arg http_proxy="http://yourIp" yourImage 
RUN echo ${http_proxy}
但在您的情况下,您不需要使用它,仅设置代理变量就足以在构建过程中使用

为了避免在DockerFile上写入密码,这种技术也非常有用

希望能有帮助