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 | 内网云隧道服务器地址 |
SERVER_PORT | 80 | 内网云服务端开放的远程端口(域名访问填 80;端口访问填你开通的端口,多隧道时每个容器不能重复) |
💡
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 多隧道部署
每个隧道用不同的容器名和不同的本地端口,远程端口(SERVER_PORT)也要各自不同——远程端口需在隧道里分别开通,两个容器抢同一个远程端口会冲突:
# 隧道 1:JupyterLab(远程 80,走域名访问)
docker run -d \
--name nwy-jupyter \
--network=host \
--restart=always \
-e PORT=8888 \
-e SERVER_PORT=80 \
-e USERNAME=yourname \
-e ASKPASS=yourpassword \
-e SERVER_NODE=gz2.neiwangyun.net \
registry.cn-shanghai.aliyuncs.com/private-project/nwy_client_amd64
# 隧道 2:图床(远程 81,需在隧道里开通 81 的端口访问)
docker run -d \
--name nwy-lsky \
--network=host \
--restart=always \
-e PORT=8080 \
-e SERVER_PORT=81 \
-e USERNAME=yourname \
-e ASKPASS=yourpassword \
-e SERVER_NODE=gz2.neiwangyun.net \
registry.cn-shanghai.aliyuncs.com/private-project/nwy_client_amd64