Docker 代理快速起步(Socks版本)
备注
本文基于 Docker 代理快速起步 修订为采用 SSH Tunneling: 动态端口转发 的socks代理模式, 实现简单易用的Docker 越过长城
概述
之前在 Docker 代理快速起步 实践中我采用了 SSH隧道 将本地回环地址端口 3128 映射到墙外的VPS上 Squid代理服务 或 Privoxy代理服务 服务端口 3128 ,这个架构基于标准的HTTP代理,功能更完备(在Squid服务器端可以实现复杂的过滤和缓存),但是毕竟多了服务器端部署,所以对于简单的 Docker 越过长城 有点过于复杂了。
所以,我在这里想用更为简单的部署来完成:
只需要租用一个配置了 ssh服务 的海外VPS
本地ssh客户端用一条命令就能够建立起 SSH Tunneling: 动态端口转发 的socks代理,为整个docker提供代理
Host主机配置 SSH Tunneling: 动态端口转发
设置
配置
~/.ssh/config 设置动态端口转发Host *
ServerAliveInterval 60
ControlMaster auto
ControlPath ~/.ssh/%h-%p-%r
ControlPersist yes
StrictHostKeyChecking no
Compression yes
Host MyProxy
HostName <SERVER_IP>
User admin
DynamicForward 1080
IdentitiesOnly yes
IdentityFile ~/.ssh/proxy/id_rsa
然后执行 ssh MyProxy 建立加密动态端口转发通道
设置docker的 Systemd进程管理器 配置
为Docker服务创建配置目录:
创建Docker服务配置目录
sudo mkdir -p /etc/systemd/system/docker.service.d
在该配置目录下创建名为
http-proxy.conf文件:
创建
http-proxy.conf 配置[Service]
Environment="HTTP_PROXY=socks5h://127.0.0.1:1080"
Environment="HTTPS_PROXY=socks5h://127.0.0.1:1080"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.cloud-atlas.dev"
备注
这里使用 socks5h 协议可以强制代理服务器解析域名,如果对于某些docker版本不兼容,可以改为 socks5
然后重启 docker 服务:
重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
验证配置:
验证docker代理配置
docker info | grep -i proxy
输出类似
验证docker代理配置输出
HTTP Proxy: socks5h://127.0.0.1:1080
HTTPS Proxy: socks5h://127.0.0.1:1080
No Proxy: localhost,127.0.0.1,docker-registry.cloud-atlas.dev
容器内代理
以上对docker的配置仅针对拉去镜像,对于启动的容器中的操作系统如果也要使用代理,则在运行时传递参数:
docker运行时向容器中的操作系统注入代理配置
docker run -e ALL_PROXY=socks5h://127.0.0.1:1080 ...