gpt4 book ai didi

docker - 在代理后面的 vagrant 中使用 docker

转载 作者:行者123 更新时间:2023-12-02 19:37:18 26 4
gpt4 key购买 nike

我想在 docker 容器中运行 apt,在 vagrant 机器中(在 virtualbox 上运行),但这失败了,因为我在代理后面。

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

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

在我运行的 bash 中
apt-get update

然后apt无法建立连接。我可以通过将以下内容添加到我的 Dockerfile 来解决此问题
ENV http_proxy <myproxy>

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

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

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

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

最佳答案

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

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

然后在 Dockerfile 上,您必须将 var 设置为参数:
ARG http_proxy

var 可以自动以这种方式使用:
RUN echo ${http_proxy}

但是在您的情况下,您不需要使用它,仅设置代理变量就足以在构建期间使用。

这种技术也非常有用,可以避免在 Dockerfile 上写入密码。

希望能帮助到你

关于docker - 在代理后面的 vagrant 中使用 docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43590454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com