为 Docker for Mac 配置 HTTP 代理

需求

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

简介

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

解决方案

  1. 把本地代理监听地址调整到 0.0.0.0
  2. 在本地设置代理时,把监听地址从 127.0.0.1 调整到 0.0.0.0。不同的软件设置方法不太相同,我用的privoxy。

    
    brew install privoxy
    # brew
    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
    # Addr: https://brew.sh
    
    
    
        cat /usr/local/etc/privoxy/config
        # 转发地址
        forward-socks5   /               localhost:1083 .
        # 监听地址
        listen-address  0.0.0.0:8118
        # local network do not use proxy
        forward         192.168.*.*/     .
        forward            10.*.*.*/     .
        forward           127.*.*.*/     .
    
  3. 将本机的 lo0 网络接口设置成任意 IP
  4. lo0 接口被称作 loopback,默认是 127.0.0.1,这里可以设置任意可用 IP 地址:

    
    sudo ifconfig lo0 alias 10.200.10.1/24    # 24是掩码
    
  5. 在 Docker for Mac 里设置代理 你可以看看自己的本地代理是在监听哪个端 privoxy
  6. 
     # 监听地址
        listen-address  0.0.0.0:8118
    

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

    Docker for Mac 设置代理
  7. 结果测试图
  8. 测试结果图

转载请注明出处,本文采用 CC4.0 协议授权