docker部署内网穿透工具核心是选对工具、配好容器、连通内外:frp轻量稳定适合全协议自定义,nps带web后台适合新手,需用host网络、挂载配置、指定镜像版本,并验证端口监听、防火墙放行和客户端连接成功。

用Docker部署内网穿透工具,核心就三点:选对工具、配好容器、连通内外。不靠复杂界面,也不依赖公网IP固定,关键在配置清晰、启动可靠、升级方便。
选一个适合你场景的穿透工具
FRP、NPS、Ngrok 都支持 Docker,但定位不同:
-
FRP:配置文件驱动,稳定轻量,适合喜欢掌控细节、需要 TCP/HTTP/UDP 全协议支持的用户;服务端镜像需指定版本(如
fatedier/frps:v0.57.0),:latest标签默认不存在 - NPS:自带 Web 管理后台,权限粒度细,客户端支持 ImmortalWrt 路由器,适合想点点鼠标配规则的新手或中小团队
- BookStack/ToolJet/Netdata 这类应用本身不是穿透工具,但常需搭配 FRP 或 NPS 暴露到公网——它们是“被穿透的对象”,Docker 部署后只需把对应端口(如 BookStack 的 8080、Netdata 的 19999)通过穿透工具映射出去即可
容器化部署的关键操作步骤
以 FRPS 服务端为例,真实可用的最小可行命令如下:
docker run -d \ --name frps \ --restart=always \ --network host \ -v /path/to/frps.ini:/etc/frp/frps.ini \ fatedier/frps:v0.57.0
注意几个硬性要点:
-
--network host:避免端口映射冲突,让容器直接复用宿主机网络,frps.ini 中的
bind_port才能被外网访问到 -
-v 挂载配置文件:必须绝对路径,且确保
frps.ini已存在并含有效配置(如[common]段定义了bind_port和token) -
显式指定镜像版本:别用
:latest,去 Docker Hub 查最新稳定版,避免拉取失败或行为不一致
让穿透真正可用的三个验证动作
容器跑起来只是第一步,必须确认三件事才算打通:
-
服务端监听正常:在云服务器上执行
ss -tuln | grep :7000(假设 bind_port=7000),看到LISTEN表示端口已打开 -
防火墙放行端口:Ubuntu 用
sudo ufw allow 7000,CentOS 用sudo firewall-cmd --add-port=7000/tcp --permanent && sudo firewall-cmd --reload -
客户端能连上:在内网机器运行 frpc,日志中出现
login to server success,且服务端日志有对应注册记录
进阶但实用的加固与便利项
上线后建议立刻加上的配置:
-
HTTPS 支持:在 frps.ini 的
[vhost_http]或[vhost_https]段启用,并挂载证书文件(如-v /certs:/certs),让映射的域名走 HTTPS -
日志持久化:加参数
-v /var/log/frps:/var/log/frp,方便排查连接失败、认证拒绝等问题 -
资源限制:加
--memory=256m --cpus=0.5防止单个穿透服务吃光服务器资源











