企业代理背后的 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的主要内容,如果未能解决你的问题,请参考以下文章