docker pull使用代理失效的解决方法

docker在拉取镜像的时候需要用到梯子,在使用lucky的stun穿透之后,原先在systemd上给docker服务加上代理的方式不行了,一直是重试然后失败。
原来根源在于dmz。

本地环境为玩客云(arm32设备)上运行lucky,docker,docker上运行openwrt。openwrt主要运行passwall2和微力同步。玩客云(IP:192.168.0.2)由于不能和openwrt(IP:192.168.0.20)使用同一网络,不能使用openwrt的梯子,所以用手机另外给玩客云提供代理服务。
lucky所在玩客云主机需要设置dmz,之后同一主机在需要梯子pull镜像时,一直提示连接超时。于是找到用github action来拉取arm32镜像,再下载到本地,上传到主机load导入的方法(github上的DockerTarBuilder项目)。github上的文件无法直接在主机上用wget或cul命令行下载(命令行参数有问题?搞不懂)。今天才发现是dmz设置导致这一问题。查看了lucky的说明书,进行stun穿透时需要有个监听端口,如果设置为0,每次会随机一个端口,所以需要把lucky主机设成dmz以实现nat1。

因此,玩客云上的docker pull要能正常使用代理有两个方法:

  • 在拉取镜像时,暂时在路由器上关闭玩客云的dmz设置。
  • 在路由器上设置端口映射,把stun穿透时的固定监听端口暴露出去。

经测试,使用代理拉取镜像正常。