企业代理背后的 docker-machine

Posted

技术标签:

【中文标题】企业代理背后的 docker-machine【英文标题】:docker-machine behind corporate proxy 【发布时间】:2015-09-20 06:02:15 【问题描述】:

我正在尝试使用 docker-machine 在公司 http 代理后面的私有云 (Openstack) 上创建一个实例。

是否可以告诉 docker-machine 使用代理,或者我是否需要预先配置 http_proxy 环境变量的 Glance 映像?

【问题讨论】:

这应该可以解决您的问题。 github.com/docker/machine/blob/… 确实如此。我认为它是在 v0.4.0 中添加的,在 v0.3.0 中不可用,谢谢。想要将其发布为答案以便我接受吗? 【参考方案1】:

使用当前的 docker 机器版本,我找不到更好的方法来进行 boot2docker (Docker/Boot2Docker: Set HTTP/HTTPS proxies for docker on OS X) 中的更改

如果在docker机器的/var/lib/boot2docker/profile中手动设置代理,重启后代理设置会自动删除。

所以我必须创建一个为代理设置--engine-env 的 docker 机器

docker-machine create -d virtualbox \
    --engine-env HTTP_PROXY=http://example.com:8080 \
    --engine-env HTTPS_PROXY=https://example.com:8080 \
    --engine-env NO_PROXY=example2.com \
    proxybox

注意事项:

这是一个两年前的答案,发生了很多变化 码头工人,所以如果你仍然不能让它在代理后面工作,请 阅读@Senri's answer 和其他人。

文档:create docker machine

【讨论】:

如果您使用类似CNTLM 在主机的localhost 上创建代理,则需要将VM 的代理设置为http://10.0.2.2:<host's proxy port>(请参阅this question)。 只是编辑/var/lib/boot2docker/profile 对我不起作用。 @Senri 的解决方案虽然有效。 合理,docker中的更新每天都在发生,我们无法及时捕捉到所有的变化,我将删除更新部分。【参考方案2】:

可以修改现有的 docker-machine 配置以添加代理环境。可以编辑 $HOME/.docker/machine/machines//.config.json 中的 config.json。

将“HTTP_PROXY=http://example.com:8080”添加到 config.json 中的 Env。重新启动机器,一切就绪。

【讨论】:

【参考方案3】:

如前所述,您可以在以下位置编辑文件

$HOME\.docker\machine\machines\default\config.json

并设置 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY 变​​量(或删除它们):

 "HostOptions": 
        "Driver": "",
        ...
        "EngineOptions": 
           ...
            "Env": [
              "HTTP_PROXY=http://10.121.8.110:8080",
              "HTTPS_PROXY=http://10.121.8.110:8080",
              "NO_PROXY=192.168.23.4"
            ],

文件编辑完成后,你只需要执行:

docker-machine provision 

【讨论】:

这适用于引擎,例如拉取图像时需要。 如果当前没有默认配置并且 $HOME\.docker\machine\ 中没有“machines”文件夹怎么办?【参考方案4】:

如果你已经创建了机器(VM),你可以像这样配置代理:

1- SSH into the docker dev host: docker-machine ssh dev
2- Add the following lines to /var/lib/boot2docker/profile (this file is read-only, use sudo)
    export HTTP_PROXY=http://<proxy>:<port>
    export HTTPS_PROXY=http://<proxy>:<port>
3- Exit the ssh session and restart the docker machine: docker-machine restart dev 

Source

【讨论】:

这对我有用!!!...我尝试了上面的方法,但对我没有用...我不知道为什么【参考方案5】:

从 Docker 18.09 开始,我们可以在命令行中指定环境变量,例如代理到容器,如下所示:

docker run --env HTTP_PROXY="172.10.13.14" -it myImage:latest /bin/bash

此外,我们可以通过将这些设置写入~/.docker/config.json 文件中来为 docker 客户端指定这些设置,如下所示:


 "proxies":
 
   "default":
   
     "httpProxy": "http://127.0.0.1:3001",
     "noProxy": "*.test.example.com,.example2.com"
   
 

更多信息请访问docs。

【讨论】:

这似乎只影响新启动的容器,但对引擎本身没有影响。

以上是关于企业代理背后的 docker-machine的主要内容,如果未能解决你的问题,请参考以下文章

企业代理背后的 Websockets

企业代理背后的 docker-machine

如何在 docker 工具箱中设置代理?

反向代理背后的 Csrfguard

代理背后的 Python 请求

代理背后的凉亭 - 摘要