我们常常会因为下面这些原因需要使用代理:
- 本机本身访问网络需要经过代理
- 本地访问Docker Hub过慢需要加速
而Docker本身又是由服务端与客户端构成
作用 | 使用代理 | |
---|---|---|
Docker客户端 | 用于连接服务端 向服务端发送指令及本地数据 | 设置代理则会通过代理与服务端进行连接 |
当我们docker服务端和客户端并不在同一设备上时 docker 使用 https 进行通信,而docker客户端是可能会受到http_proxy、 https_proxy环境变量影响的。可能的原因因为Docker客户端版本不同或者其他原因造成有时会影响有时不会影响
如果在客户端的命令行设置了 http_proxy、 https_proxy 之后,客户端会通过代理链接服务端,此时,如果代理不可到达服务器(比如OSX中docker服务端在本地的虚拟机中,使用Host-only方式与本机链接,如果使用的代理并非本机,则代理无法到达本地虚拟机种的docker服务端),则会导致docker命令无法连上服务端。 |
||
Docker服务端 | Docker的执行进程 对外提供接口 执行收到的命令(包含实际访问Docker Registry、Docker Hub) |
通过代理进行对应的网络请求 |
在Bash运行环境中设置的 http_proxy、 https_proxy、 no_proxy docker的服务端并不能识别 参考 Github Issue #402 Using Docker behind a firewall。
|
Docker服务端设置代理(加速)
1. 给Docker配置代理
在启动Docker服务端的命令行前直接加入: HTTP_PROXY=server:port
例如直接启动时使用:
sudo HTTP_PROXY=server:port docker -d &或者在docker的服务启动文件(如:/usr/local/etc/init.d/docker)找到
/usr/local/bin/docker -d,在前面加入 HTTP_PROXY=server:port
2. 使用Daocloud加速器
如果Docker服务器并不需要代理来访问外部网络,仅仅是访问 Docker Hub 过慢的话,还可以考虑 DaoCloud 提供的 Mirror加速器。具体参见:https://dashboard.daocloud.io/mirror