判断你要代理哪一层

目标推荐方式检查什么主要风险
只让 1 个容器访问外部服务容器环境变量应用是否读取代理变量应用不认变量
让 3-5 个容器共用同一路径独立 Docker network容器之间是否要互访DNS 和内网访问变复杂
让整台 NAS 的容器都经过网关旁路由或网关规则NAS 管理页是否能保留直连改错会影响管理页面
只临时拉镜像或下载文件命令行临时变量命令执行后是否清理不适合常驻服务

最安全的顺序是:先测单容器,再扩到一组容器,最后才碰宿主机或网关。NAS 上的管理页、套件中心、备份任务和 Docker 拉镜像都依赖宿主机网络,先改全局很容易把问题扩大。

单个容器怎么写 HTTP_PROXY?

容器只需要知道本地代理入口,不需要订阅链接。常见写法是把代理地址设成 http://网关IP:端口,同时写大写和小写变量:

environment:
  HTTP_PROXY: "http://192.168.1.2:7890"
  HTTPS_PROXY: "http://192.168.1.2:7890"
  ALL_PROXY: "socks5://192.168.1.2:7891"
  NO_PROXY: "localhost,127.0.0.1,192.168.1.0/24,nas.lan"
  http_proxy: "http://192.168.1.2:7890"
  https_proxy: "http://192.168.1.2:7890"
  all_proxy: "socks5://192.168.1.2:7891"
  no_proxy: "localhost,127.0.0.1,192.168.1.0/24,nas.lan"

NO_PROXY 不要省。很多 NAS 容器还要访问本机数据库、内网 API、路由器或另一个容器;这些地址被代理接管后,表现会像“外网好了,内网坏了”。

群晖、TrueNAS、Unraid 要注意什么?

群晖 Container Manager 里优先在容器的环境变量页写代理,不要先改 DSM 的系统代理。DSM 系统代理会牵连套件中心和更新任务,排错范围会变大。

TrueNAS SCALE 上常见问题是 App、Docker 和 Kubernetes 风格配置混在一起。只改目标应用的环境变量,别把节点网络、系统 DNS 和容器代理同时调整。

Unraid 上很多容器通过模板维护变量。改完模板后要重建或重启容器,光保存配置不一定会让旧进程读到新变量。

普通 Linux NAS 最直接,用 Compose 文件管理变量。先建一个 curlalpine 测试容器,确认代理可用,再复制到业务容器。

什么时候该用独立 Docker network?

当 3 个以上容器要共用同一出口,又要保留它们之间的互访关系时,独立 Docker network 比逐个写变量更清楚。比如下载器、索引器、媒体库管理器可以放一组,相册、备份、家庭自动化放另一组。

独立 network 不是“更高级就更好”。它会带来两个额外问题:DNS 谁来解析、局域网地址是否绕开代理。如果你只是让一个容器访问 GitHub API 或拉取元数据,环境变量通常更省事。

什么时候用旁路由或网关规则?

多个容器都要按域名或 IP 分流,并且应用本身不支持代理变量时,旁路由或网关规则才值得上。典型场景是下载器、同步工具和命令行任务都需要同一套出口策略,逐个容器改变量反而容易漏。

如果 NAS、电脑和手机共用同一份客户端配置,可以把配套订阅线路作为配置来源之一;NAS 侧仍然只消费本地代理端口或网关,不要把订阅 URL 散落到每个容器里。

怎么确认没有影响宿主机?

看宿主机默认路由。Linux NAS 上执行 ip route,确认 default route 没变;群晖、TrueNAS、Unraid 则看网络设置里的网关是否仍是原路由器地址。

再进测试容器看环境变量:

env | grep -i proxy

最后分别测 3 个方向:容器访问外部地址、容器访问 NAS 内网服务、宿主机访问套件中心或镜像仓库。三个方向都通,才说明代理范围没有误伤宿主机。

排错顺序按什么来?

表现更可能原因做什么
容器里 curl 走代理,应用不走应用不读取环境变量查应用文档,补小写变量或应用内代理设置
外部访问好了,内网 API 坏了NO_PROXY 缺内网地址加 NAS IP、网关 IP、局域网网段和服务域名
重启后配置丢失只在 shell 里临时 export写入 Compose、容器模板或启动参数
NAS 管理页变慢或套件联网异常改到了系统代理或网关回滚宿主机网络,只保留容器级配置
多容器互相找不到network 或 DNS 变化固定容器名、检查 network 和服务发现

排错时一次只改一个变量,把 HTTP_PROXYHTTPS_PROXY 跑通,再处理 ALL_PROXY;先保证外部访问,再补 NO_PROXY 修内网访问。

相关阅读