最近在玩docker,由于众所周知的原因,在国内访问海外的网站速度会很慢,在docker内的表现是git clone和apt install缓慢。这个问题的常见解决方法是换源、挂代理。这里我使用了挂代理的方式解决,主要是考虑比较通用,不需要给每个工具配置一遍源。
在container里面挂代理,需要确定container是如何和host的网络通信的。实际上,在host有一个docker0的虚拟网卡,用于container和host通信,可以这么查看:
1 | # host |
在container内,我们同样观察一下网络的路由配置:
1 | # container |
可以发现container的ip包默认会转发到172.17.0.1,这正是host的docker0网卡配置的ip。至此,我们确定了container和host通信的ip地址。
为了让host允许container访问所有port,需要修改host的ip路由表:
1 | # host |
假设在host已经配置了一个可用的代理地址127.0.0.1:7890,那么container访问这个代理就需要使用172.17.0.1:7890。
在container可以如此配置代理:
1 | export http_proxy=http://172.17.0.1:7890 |
这样设置后,运行curl www.google.com
成功,就说明代理生效了。通过设置这两个变量后,apt install和git clone也成功挂上了代理。
参考: