Docker proxy setting


发现一个有点坑的问题:

公司内网要访问外网是要设代理的,以前需要访问外网的话都是直接命令行:
export http_proxy=xxxxxx

export https_proxy=xxxxx

但在docker pull 官方镜像的时候一直失败,即使export了代理。
后面发现必须把export写在docker的配置文件里(/etc/default/docker)才有效,直接在命令行export,没用。

谁能解释下,为什么docker pull的时候,当前ENV 的 https_proxy/http_proxy 没产生作用?
已邀请:

徐磊 - BlackOps@Qunar

赞同来自: afengisme styshoo


<ol><li>挂国内的镜像站</li><li>用楼上的http_proxy方式在启动daemon的时候指定,daemon用了sync.Once初始化的http_proxy和HTTP_PROXY,后面再加对daemon已经不起作用了,所以只能改/etc/default/docker(ubuntu)里的参数,重启下docker。</li><li>如果想一劳永逸的话干脆自己搭一个registry把要用的镜像都拉过来。</li></ol>

9lives - 爱生活,爱云计算。

赞同来自:


我之前遇到同样的问题,如果有代理,想要pull必须在docker config file(/etc/default/docker)中设置代理才可以,这个代理应该是对docker client的不是为daemon设置的(个人理解),docker client可能只认这种设置代理的方式,不管系统环境变量。

除此之外,如果公司使用自己的dns server那么需要在 、/etc/default/docker 中设置,比如:

DOCKER_OPTS="-H tcp://0.0.0.0:4000 -H unix:///var/run/docker.sock --dns x.x.x.x"

如果再深入了解pull的原理估计得到代码级别了,本人暂时还没研究。

欢迎大家一起讨论。:-)

lioncui - 工程师

赞同来自:


启动时这样: 这样就是带代理环境变量启动
http_proxy=xxxxxx docker -d &

load2009

赞同来自:


如果是用systemctl启动的docker服务,shell里面导出的env无效;
systemctl的环境变量只取.service脚本配置的,service文件里面一般是指向docker自己的配置文件;

要回复问题请先登录注册