在配置 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:
- SSH 登录 TrueNAS。
- 执行临时代理拉取命令:
- 如果拉取成功,你就可以回到 TrueNAS Web 界面,点击应用的 Install/Start 了(因为镜像已经存在本地,系统不会再次去下载)。
方法二:全局配置 Docker 使用 SOCKS5(标准 Linux 方式)
如果你希望 Docker 以后拉取任何镜像都自动走代理,需要修改 systemd 的配置。
注意: 在 TrueNAS Scale 上修改系统文件可能会在系统更新后丢失,且配置错误可能导致 Docker 无法启动。
-
创建/编辑 Docker 代理配置文件:
-
写入以下内容(请修改 IP 和端口):
- NO_PROXY 非常重要!一定要把局域网 IP 段排除,否则 Docker 容器之间的通信、以及 TrueNAS Web 界面与 Docker 的通信也会走代理,导致系统再次报错。
-
重载配置并重启 Docker:
-
验证是否生效:
Bashsudo docker info | grep Proxy如果输出显示了你的代理地址,说明配置成功。
方法三:最稳妥的方案(使用 HTTP 端口)
这是最不容易出错的方案。
很多代理软件(如 Clash, v2rayN, Surge 等)在开启 SOCKS5 的同时,通常也会开启一个 HTTP 代理端口(通常是 SOCKS5 端口+1,或者在配置里能看到)。
Docker 对 http:// 代理协议的支持比 socks5:// 稳定得多。
- 去你的代理软件里看一眼,是否有一个
HTTP或Mixed端口。 - 在 TrueNAS 的配置(无论是 Web 界面设置还是上述的命令行设置)中,直接使用 HTTP 协议:
总结
- 先试临时命令:用
sudo env HTTPS_PROXY=socks5://... docker pull ...手动拉取镜像,解决当务之急。 - 推荐转 HTTP:如果可能,尽量使用代理软件提供的 HTTP 端口 而不是 SOCKS5 端口,兼容性最好。
- 配置 NO_PROXY:无论用哪种方式,千万别忘了排除局域网地址(
127.0.0.1和192.168.x.x),否则 TrueNAS 的 Kubernetes/Docker 内部通信会断开。