跳到主要内容

Docker 持久化部署内网云隧道

一行命令拉起隧道容器,开机自启、挂了自动重启,比 crontab 和 Supervisor 都省心。


🤔 为什么推荐 Docker?

部署方式开机自启挂了重启多隧道管理安装成本
nssh --daemon✅ 自动重连❌ 手动
crontab @reboot
Supervisor需安装
Docker需安装 Docker

Docker 的优势:

  • ✅ 镜像自带 nssh,不需要手动下载安装
  • ✅ 镜像只有 7MB,拉取秒完成
  • --restart=always 自动重启,比 Supervisor 更轻量
  • ✅ 多隧道用多个容器,互不干扰

一、快速部署(一条命令)

docker run -d \
--name nwy-tunnel \
--network=host \
--restart=always \
-e IP=127.0.0.1 \
-e PORT=8080 \
-e USERNAME=yourname \
-e ASKPASS=yourpassword \
-e SERVER_NODE=gz2.neiwangyun.net \
registry.cn-shanghai.aliyuncs.com/private-project/nwy_client_amd64

⚠️ 把 yournameyourpasswordPORTSERVER_NODE 换成你自己的值。

跑完这一步,隧道就已经在运行了。 接下来检查一下是否成功:

# 查看容器状态
docker ps | grep nwy-tunnel

# 查看日志
docker logs nwy-tunnel
# 看到 "Tunnel established successfully!" 就说明通了 ✅

二、参数说明

2.1 环境变量(你需要改的)

环境变量默认值说明
IP127.0.0.1要穿透的本地服务地址(一般不用改)
PORT8000要穿透的本地服务端口
USERNAMEyourname你的内网云隧道用户名
ASKPASSyourpassword你的内网云隧道密码
SERVER_NODEgz2.neiwangyun.net内网云隧道服务器地址

💡 IP 保持 127.0.0.1 即可,配合 --network=host 使用。如果你的服务跑在其他机器上,改成那台机器的 IP 并去掉 --network=host

2.2 Docker 参数(一般不用改)

参数作用
docker run -d后台运行容器
--name nwy-tunnel给容器起个名字,方便管理
--network=host使用宿主机网络(IP=127.0.0.1 时必须加)
--restart=always开机自启 + 挂了自动重启
-e KEY=VALUE传入环境变量

三、支持的架构

镜像适用平台
nwy_client_amd64Intel/AMD x86_64 服务器、大多数云服务器
nwy_client_arm64ARM64 设备(树莓派 4/5、Apple Silicon、ARM 云服务器)

怎么知道自己是什么架构?

uname -m
# x86_64 → 用 amd64
# aarch64 → 用 arm64

💡 镜像基于 Alpine 制作,打包后只有 7MB,拉取非常快。


四、日常管理

4.1 常用命令

命令作用
docker ps查看容器是否在运行
docker logs nwy-tunnel查看日志
docker logs -f nwy-tunnel实时跟踪日志
docker restart nwy-tunnel重启隧道
docker stop nwy-tunnel停止隧道
docker start nwy-tunnel启动隧道
docker rm -f nwy-tunnel删除容器

4.2 修改配置

Docker 环境变量改了不会自动生效,需要重建容器:

# 删除旧容器
docker rm -f nwy-tunnel

# 用新参数重新启动
docker run -d \
--name nwy-tunnel \
--network=host \
--restart=always \
-e IP=127.0.0.1 \
-e PORT=新的端口 \
-e USERNAME=yourname \
-e ASKPASS=yourpassword \
-e SERVER_NODE=gz2.neiwangyun.net \
registry.cn-shanghai.aliyuncs.com/private-project/nwy_client_amd64

4.3 多隧道部署

每个隧道用不同的容器名和不同的端口:

# 隧道 1:JupyterLab
docker run -d \
--name nwy-jupyter \
--network=host \
--restart=always \
-e PORT=8888 \
-e USERNAME=yourname \
-e ASKPASS=yourpassword \
-e SERVER_NODE=gz2.neiwangyun.net \
registry.cn-shanghai.aliyuncs.com/private-project/nwy_client_amd64

# 隧道 2:图床
docker run -d \
--name nwy-lsky \
--network=host \
--restart=always \
-e PORT=8080 \
-e USERNAME=yourname \
-e ASKPASS=yourpassword \
-e SERVER_NODE=gz2.neiwangyun.net \
registry.cn-shanghai.aliyuncs.com/private-project/nwy_client_amd64

五、常见问题

Q: 容器一直重启(Restarting)怎么办?

# 查看报错
docker logs nwy-tunnel

常见原因:

  • USERNAMEASKPASS 填错 → 认证失败
  • SERVER_NODE 填错 → 连不上服务器
  • PORT 对应的服务没有运行 → 本地连接被拒绝

Q: 拉取镜像很慢?

镜像托管在阿里云容器服务(国内源),一般不会慢。如果确实慢,检查一下网络:

# 测试网络连通性
ping registry.cn-shanghai.aliyuncs.com

Q: --network=host 是什么?可以不加吗?

  • 如果 IP=127.0.0.1(穿透本机服务),必须加 --network=host
  • 如果 IP 是其他机器的地址,可以不加

Q: 和 Supervisor 方式选哪个?

你的情况推荐
已经装了 Docker用 Docker
没装 Docker,不想装用 crontab 或 Supervisor
需要多条隧道Docker 或 Supervisor
只有 1 条隧道都行,看你顺眼

📚 参考资料


📝 本教程由内网云团队整理,如有问题欢迎反馈。