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
⚠️ 把
yourname、yourpassword、PORT、SERVER_NODE换成你自己的值。
跑完这一步,隧道就已经在运行了。 接下来检查一下是否成功:
# 查看容器状态
docker ps | grep nwy-tunnel
# 查看日志
docker logs nwy-tunnel
# 看到 "Tunnel established successfully!" 就说明通了 ✅
二、参数说明
2.1 环境变量(你需要改的)
| 环境变量 | 默认值 | 说明 |
|---|---|---|
IP | 127.0.0.1 | 要穿透的本地服务地址(一般不用改) |
PORT | 8000 | 要穿透的本地服务端口 |
USERNAME | yourname | 你的内网云隧道用户名 |
ASKPASS | yourpassword | 你的内网云隧道密码 |
SERVER_NODE | gz2.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_amd64 | Intel/AMD x86_64 服务器、大多数云服务器 |
nwy_client_arm64 | ARM64 设备(树莓派 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
常见原因:
USERNAME或ASKPASS填错 → 认证失败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 条隧道 | 都行,看你顺眼 |
📚 参考资料
📝 本教程由内网云团队整理,如有问题欢迎反馈。