如何配置docker使用socks5代理

目录

在配置 Docker 使用 SOCKS5 代理时,有一个关键点需要注意:Docker 引擎(Daemon)本身对 SOCKS5 的支持在不同版本中表现不一,且官方更推荐使用 HTTP/HTTPS 代理。

不过,较新的 Docker 版本(通常 20.10+)是支持直接在环境变量中填入 socks5:// 的。

鉴于你正在使用 ​TrueNAS Scale​(基于 Debian Linux),我们有“​临时生效​”和“​永久生效​”两种配置思路。


方法一:临时让 Docker 走 SOCKS5 代理(推荐先试这个)

如果你只是想把 filebrowser 的镜像拉下来,没必要修改系统底层的配置文件(TrueNAS 升级可能会重置这些文件)。你可以直接在 SSH 命令行中通过环境变量强制执行。

假设你的 SOCKS5 代理在 192.168.1.5:1080

  1. SSH 登录 TrueNAS​。
  2. 执行临时代理拉取命令​:
  3. 如果拉取成功,你就可以回到 TrueNAS Web 界面,点击应用的 Install/Start 了(因为镜像已经存在本地,系统不会再次去下载)。

方法二:全局配置 Docker 使用 SOCKS5(标准 Linux 方式)

如果你希望 Docker 以后拉取任何镜像都自动走代理,需要修改 systemd 的配置。

注意: 在 TrueNAS Scale 上修改系统文件可能会在系统更新后丢失,且配置错误可能导致 Docker 无法启动。

  1. 创建/编辑 Docker 代理配置文件​:

  2. 写入以下内容​(请修改 IP 和端口):

    • NO_PROXY 非常重要!一定要把局域网 IP 段排除,否则 Docker 容器之间的通信、以及 TrueNAS Web 界面与 Docker 的通信也会走代理,导致系统再次报错。
  3. 重载配置并重启 Docker​:

  4. 验证是否生效​:
    Bash

    sudo docker info | grep Proxy
    

    如果输出显示了你的代理地址,说明配置成功。


方法三:最稳妥的方案(使用 HTTP 端口)

这是最不容易出错的方案。

很多代理软件(如 Clash, v2rayN, Surge 等)在开启 SOCKS5 的同时,通常也会开启一个 ​HTTP 代理端口​(通常是 SOCKS5 端口+1,或者在配置里能看到)。

Docker 对 http:// 代理协议的支持比 socks5:// 稳定得多。

  1. 去你的代理软件里看一眼,是否有一个 HTTPMixed 端口。
  2. 在 TrueNAS 的配置(无论是 Web 界面设置还是上述的命令行设置)中,直接使用 HTTP 协议:

总结

  1. 先试临时命令​:用 sudo env HTTPS_PROXY=socks5://... docker pull ... 手动拉取镜像,解决当务之急。
  2. 推荐转 HTTP​:如果可能,尽量使用代理软件提供的 HTTP 端口 而不是 SOCKS5 端口,兼容性最好。
  3. 配置 NO_PROXY​:无论用哪种方式,千万别忘了排除局域网地址(127.0.0.1192.168.x.x),否则 TrueNAS 的 Kubernetes/Docker 内部通信会断开。