為 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.io 和 DockerHub 進行測試,基本上可以滿速,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 系統,網路上有相通之處。
歡迎評論分享其他更好的方法。
推薦閱讀:
※全面提升,阿里雲Docker/Kubernetes(K8S) 日誌解決方案與選型對比
※Docker(五):Docker 三劍客之 Docker Machine
※docker的網路基礎
※如何看待Docker改名為Moby?