faq_2026-09-29_net_4


title: “群晖Docker容器里搭的服务外网访问不到怎么排查” description: “群晖 Docker 里跑的 Web 服务,内网用 NAS 的 IP 加端口访问一切正常,出了公司网络或用手机流量就连不上。这篇沿容器端口映射、DSM 防火墙、路由器转发三层链逐层排查。” date: 2026-09-29 slug: synology-docker-service-not-accessible-from-internet categories: [“常见问答”] draft: false

在群晖 NAS 的 Docker 里搭了一个服务,比如一个内部用的 Web 应用。在公司里用 NAS 的内网 IP 加端口访问,一切正常;下班回家、或者用手机流量一试,就是打不开。容器明明在跑、内网明明能访问,为什么外网就是进不来。这类现场要按一条三层链来排查:容器到 NAS 的端口映射、DSM 自带防火墙、路由器的端口转发,断点基本逃不出这三层。先划一下边界:容器主动访问外网上不去、连代理报 no route to host 那类出方向的问题,是另一篇的范围,这篇讲的是外面的人访问不进来。

原因分析

外网访问容器里的服务,流量要穿过三道门。头一道是容器到 NAS 这一段:容器用 bridge 网络时,容器端口必须映射成 NAS 的本地端口,外部访问的其实是 NAS 的 IP 加本地端口,两栏端口填反或者没映射,这一段就断了;用 host 网络的容器则直接占 NAS 的端口,不需要映射。第二道是 DSM 防火墙:控制面板的安全性里如果启用了防火墙规则,没放行这个端口,流量到了 NAS 也被拦下。第三道是路由器:外网进来的连接要靠路由器把公网端口转发到 NAS 的内网 IP,没做转发、转发地址填错,或者宽带本身没有公网 IPv4(运营商大内网),外网这一段就走不通。内网正常而外网不通,说明头一段大概率没问题,重点在后两段,但仍要先把映射核对一遍再往外查。

分步解决

  1. 核对端口映射的方向。在 Container Manager(旧版叫 Docker)的容器端口设置里确认两栏:容器端口填应用自己监听的口,本地端口填想对外使用的口,协议按应用选 TCP 或 UDP。bridge 网络的容器这一步不能省,host 网络的容器跳过。
  2. 用另一台内网设备验证。拿同事的电脑访问 NAS 的 IP 加本地端口,能打开说明容器和映射都正常,把排查重心移到出口;打不开则回到上一步,顺带确认容器日志里服务是否真的在监听。
  3. 检查 DSM 防火墙。控制面板、安全性、防火墙里看是否启用,确认对应端口在放行规则内;不确定时可以临时停用防火墙试一次,通了就回头补一条精确的放行规则再把防火墙开回来。
  4. 配置路由器端口转发。在路由器的转发规则里把外部端口指向 NAS 的内网 IP 和本地端口;同时看一眼路由器 WAN 口的地址,如果不是公网 IP(和 ip 查询网站看到的不一致),说明宽带在运营商大内网里,端口转发天然无效,需要找运营商要公网地址,或改用 IPv6 访问、组 VPN 回家这类方案。
  5. 脱离内网做终验。改完后用手机关掉无线、走流量访问一次,通了才算数;在公司里测,流量可能仍从内网走,测不出真实效果。

预防

给每个对外服务建一张端口台账,记清容器端口、本地端口、转发端口三层的对应关系,排查时照单核对;公网只放行确实需要的端口,管理类入口能限来源地址就限。服务发布到外网前,把端口、来源限制和转发规则列成清单过一遍,既能少踩坑,也能少留敞口。