为 Docker for Mac 配置 HTTP 代理

为 Docker for Mac 配置 HTTP 代理

需求

使用 Docker for Mac 时,让 docker pull/push 走本地的代理端口。



简介

Docker 是一种虚拟容器,可以提高开发过程中环境的一致性,便于维护,并且大大促进了知识以及经验的分享和积累。Docker for Mac 是 Docker 专门为 macOS 开发的图形客户端,使用起来相当方便,不过如果从 docker 仓库拉取镜像,那速度真是感人,1.5G 的镜像,估计一天一夜都下载不完,中途中断更是让人崩溃。更悲剧的是,docker 的网络流量无法走设置好的代理,比如本地的 http://127.0.0.1:1235,无论是在 Docker for Mac 图形界面里设置,或者在环境变量里设置 http_proxy/https_proxy 都没有效果,Proxychains4 大法也无效。另外,DaoCloud 的 Docker 加速器以及阿里云的 Docker 国内镜像服务,都有一定的效果,但速度不甚理想,而且新的 docker 镜像可能还没来得及缓存。



解决方案

1. 把本地代理监听地址调整到 0.0.0.0

在本地设置代理时,把监听地址从 127.0.0.1 调整到 0.0.0.0。不同的软件设置方法不太相同,但大同小异,如果你在使用 Surge,可以在配置文件的 [General] 部分修改 interface 的值:

interface = 0.0.0.0    # 默认是 127.0.0.1

2. 将本机的 lo0 网络接口设置成任意 IP

lo0 接口被称作 loopback,默认是 127.0.0.1,这里可以设置任意可用 IP 地址:

sudo ifconfig lo0 alias 10.200.10.1/24    # 24是掩码

3. 在 Docker for Mac 里设置代理

你可以看看自己的本地代理是在监听哪个端口,比如 Surge 默认是 1235 端口,在配置文件的 [General] 部分可以看到这一行:

port = 1235

不同的软件使用的端口可能不一样,根据情况设置,最后的代理地址就是上面第二部分的 IP 加上这个端口,如下图:



结果

使用 docker pull 针对 quay.ioDockerHub 进行测试,基本上可以满速,1.5G 的 docker 镜像,1-3MB/s 的话, 只需要 10 分钟左右,Docker 的使用体验得到大幅提升。当然这依赖于你的网络和代理带宽。



注意事项

1. lo0 网络接口设置好后,这个 alias 地址是临时的,重新启动机器后会清除。如果需要持久化,必须有另外的设置,此处不再细说。

2. 本地代理地址设置到 0.0.0.0 之后,本机安全性大大降低,建议下载或上传完毕后,将监听地址修改回 127.0.0.1。


3. Linux 下未经测试,但 macOS 和 Linux 同源于 Unix 系统,网络上有相通之处。

欢迎评论分享其他更好的方法。

编辑于 2017-03-28