Docker 原生的只有 Linux 支持,其它系统都是通过在虚拟机里面跑一个 Linux 环境来构造 Docker 环境。当然其它也包括了 MacOS。 在正常的网络环境下,理论上也不会有太多的使用体验区别。但是很可惜,我们生活在一个网络环境并不正常的维度里!

先简单讲下我的环境:

  • Mac OS 10.12.1 Sierra
  • Docker 1.12.3 官网下载的图形界面版本(dmg格式安装的)
  • brew 1.1.5

Docker 支持 http(s)_proxy 环境变量。 我装的是 libuv 版本的 ss ,只有 sock5 代理。为此需要一个能把 sock5 代理 转化为 http(s)_proxy 的工具:

安装 polipo :

1
brew install polipo

配置 polipo:

1
vim ~/.polipo

内容:

1
2
3
socksParentProxy=localhot:1080
proxyAddress=0.0.0.0
allowedClients=127.0.0.1,::1,10.20.0.0/24

最后2行很重要!docker 实际上是跑在一个虚拟机中,这里需要允许外部的连接进来,最后一个网段便是我虚拟内部的网段。具体的地址可以 通过下面的命令找出来:

1
ifconfig | grep inet

启动 polipo:

1
polipo

看着哪个不是你的局域网网段的基本上就是了。

点击右上角的 Docker 图标,Preferences -> Advanced -> HTTPS PROXY 填上之前在 ifconfig 观察到的那个 ip 地址就行了。

若过程中遇到问题可以利用以下的命令测试 proxy server 是不是正常启动:

1
https_server=192.168.x.x curl https://www.goolge.com

注意要填你局域网的网址,确定是可以通过外部的方式联接。