跳到主要内容

用 Docker 运行网云穿客户端(NAS、Linux 服务器)

复制一条命令,用官方 Linux 客户端在 Docker 容器里运行一条隧道,并学会看日志、重启和更新。

适用场景

  • 群晖、威联通、Unraid 等支持 Docker 的 NAS,或已经在用 Docker 的 Linux 服务器。
  • 一个容器运行一条隧道;要跑多条隧道,就开多个容器。

注意: 网云穿目前没有发布官方 Docker 镜像。本教程使用“官方 Linux 客户端 + 通用 alpine 镜像”的方式,不需要任何第三方镜像。网上搜到的同名镜像都不是官方的,请不要使用。

如果你的 Linux 支持 systemd(多数服务器都支持),更推荐按 Linux 客户端教程 安装:一个服务就能跑多条隧道,还能在官网“设备”页远程管理。Windows 电脑请直接用 图形客户端,不建议用 Docker Desktop。

前置条件

  • 已在控制台创建好隧道,并填好“内网地址”和“端口”。还没有隧道请先看 第一次使用。
  • 已复制这条隧道的客户端令牌:控制台左侧点“隧道”,在这条隧道右侧点“连接凭证”,在弹出的“客户端令牌”窗口复制。
  • 能用 SSH 登录 NAS 或服务器,并且有 root 或 sudo 权限。
  • 已安装 Docker:执行 docker version,能看到版本号即可。

操作步骤

第 1 步:查看设备的 CPU 架构

SSH 登录后执行:

uname -m

记下输出,下一步按它选择下载地址:

uname -m 输出 选择的下载项
x86_64 linux-x86_64-tar-gz
aarch64 或 arm64 linux-arm64-tar-gz
armv7l linux-armv7-tar-gz
i386 或 i686 linux-x86-tar-gz

第 2 步:下载官方 Linux 客户端

依次执行下面的命令(示例是 x86_64,其他架构把地址里的 linux-x86_64-tar-gz 换成上表对应的那一项):

sudo mkdir -p /opt/wyc-client/
cd /opt/wyc-client/
sudo wget -O wyc-client.tar.gz "https://update.too1.net/d/wyc/stable/linux-service/linux-x86_64-tar-gz?source=wyc_official"
sudo tar -xzf wyc-client.tar.gz
sudo chmod +x ./wyc-client
./wyc-client version

成功后会看到一行类似 wyc-client 8.0.11 commit=… 的版本信息。

  • 提示 wget: command not found:把第三行换成 sudo curl -L -o wyc-client.tar.gz "上面的地址"。
  • 想核对文件是否完整:执行 sha256sum wyc-client.tar.gz,结果应与 下载页 该文件的 SHA256 完全一致。

第 3 步:确认“内网地址”填对了

本教程的容器使用 --network host(主机网络),容器里的 127.0.0.1 就是这台 NAS 本身。按下表核对控制台里这条隧道的“内网地址”和“端口”:

你要发布的服务在哪里 内网地址填 端口填
就在这台 NAS 上(例如 NAS 管理页、NAS 上的网站) 127.0.0.1 服务的端口,例如 5000
在这台 NAS 的另一个 Docker 容器里 127.0.0.1 该容器用 -p 映射到 NAS 的端口
在局域网的另一台电脑或设备上 那台设备的局域网 IP,例如 192.168.1.20 那台设备上服务的端口

先在 NAS 上测一下服务能不能访问(地址和端口换成你的):

curl -I http://127.0.0.1:5000

成功后会看到 HTTP/1.1 200、302 之类的响应头。如果显示 Connection refused,说明服务没启动或端口不对,先解决这个再继续。TCP 类服务(如 SSH)可以跳过这一步,直接在第 5 步验证。

第 4 步:启动容器

把下面命令里的 把这里换成你的客户端令牌 换成第“前置条件”里复制的令牌(保留两边的单引号),然后整段复制执行:

sudo docker run -d \
  --name wyc-tunnel \
  --restart unless-stopped \
  --network host \
  -e WYC_TUNNEL_TOKEN='把这里换成你的客户端令牌' \
  -e WYC_CLIENT_INSTANCE_ID=docker-wyc-tunnel \
  -v /opt/wyc-client/wyc-client:/usr/local/bin/wyc-client:ro \
  alpine:3.20 \
  /usr/local/bin/wyc-client run

每一行的作用:

参数 作用
--name wyc-tunnel 容器名字,后面看日志、重启都用它;多条隧道请起不同名字
--restart unless-stopped 容器意外退出或 NAS 重启后自动启动;手动 docker stop 后不再自动启动
--network host 使用主机网络,容器里的 127.0.0.1 就是 NAS 本身
WYC_TUNNEL_TOKEN 这条隧道的客户端令牌
WYC_CLIENT_INSTANCE_ID 给这个容器一个固定标识,容器重启后能被认作同一个客户端,避免被当成“另一个连接”。每个容器用不同的值
-v …:ro 把第 2 步下载的客户端放进容器,只读
alpine:3.20 通用的精简 Linux 镜像,只用来运行客户端
/usr/local/bin/wyc-client run 在容器里启动客户端

第 5 步:查看日志,确认连上了

sudo docker logs -f wyc-tunnel

成功后会看到类似下面的内容:

10:30:12  隧道已连接:办公网站
           访问地址:https://xxxx.example.com
           内网地址:127.0.0.1:5000

按 Ctrl+C 退出日志查看,容器会继续运行。然后用手机关掉 Wi-Fi、用流量打开日志里的“访问地址”;TCP 隧道用对应软件(如 SSH 客户端)连接控制台显示的公网地址和端口。

日常管理

要做的事 命令
看最近 100 行日志 sudo docker logs --tail 100 wyc-tunnel
查看是否在运行 sudo docker ps --filter name=wyc-tunnel
重启 sudo docker restart wyc-tunnel
暂停这条隧道 sudo docker stop wyc-tunnel
删除容器 sudo docker rm -f wyc-tunnel

更换令牌(例如在控制台点了“更换令牌”):先 sudo docker rm -f wyc-tunnel,再用新令牌重新执行第 4 步。

更新客户端:重新执行第 2 步下载新版,然后 sudo docker rm -f wyc-tunnel,再执行第 4 步。

再加一条隧道:重新执行第 4 步,把 --name 和 WYC_CLIENT_INSTANCE_ID 都换成新的名字(例如 wyc-ssh、docker-wyc-ssh),令牌换成另一条隧道的。

喜欢用 docker compose

在 /opt/wyc-client/ 下新建 docker-compose.yml,内容如下(令牌同样要替换):

services:
  wyc-tunnel:
    image: alpine:3.20
    container_name: wyc-tunnel
    restart: unless-stopped
    network_mode: host
    environment:
      WYC_TUNNEL_TOKEN: "把这里换成你的客户端令牌"
      WYC_CLIENT_INSTANCE_ID: docker-wyc-tunnel
    volumes:
      - /opt/wyc-client/wyc-client:/usr/local/bin/wyc-client:ro
    command: ["/usr/local/bin/wyc-client", "run"]

在同一目录执行 sudo docker compose up -d 启动,sudo docker compose logs -f 看日志。

用 NAS 的 Docker 图形界面

如果不方便用命令,可以在 NAS 自带的 Docker/容器管理界面新建容器,对应填写:镜像 alpine:3.20;网络选“host/主机”;环境变量 WYC_TUNNEL_TOKEN 和 WYC_CLIENT_INSTANCE_ID;把 NAS 上的 /opt/wyc-client/wyc-client 文件映射到容器的 /usr/local/bin/wyc-client(只读);启动命令 /usr/local/bin/wyc-client run;勾选自动重启。第 2 步的下载仍需在 SSH 里完成。

成功检查

  • sudo docker ps --filter name=wyc-tunnel 能看到状态是 Up。
  • 日志里出现“隧道已连接”,访问地址与控制台一致。
  • 手机流量能打开网站,或能用对应软件连上 TCP 服务。
  • 重启一次 NAS,开机后不用手动操作,容器自动运行、日志再次显示“隧道已连接”。

常见错误

你看到的 原因 怎么办
exec format error 下载的架构不对 回到第 1 步核对 uname -m,重新下载对应的包
日志显示“隧道令牌无效或已更换”,容器反复重启 令牌复制错了,或在控制台更换过令牌 在“连接凭证”里复制最新令牌,删除容器后重新执行第 4 步
日志显示“缺少隧道令牌” 命令里漏了 -e WYC_TUNNEL_TOKEN=… 补上后重新执行第 4 步
日志显示“这条隧道已在另一个连接中运行” 同一条隧道已经在别的电脑或客户端上运行 先停掉另一处的客户端;容器会自动重试
隧道已连接,但访问报 502 或打不开 内网地址或端口填错,或服务没启动 回到第 3 步,在 NAS 上用 curl 测试,修改控制台里的内网地址后等几秒再试
日志显示“隧道已到期” 套餐到期 在控制台续费后容器会自动重连,必要时 docker restart
执行 docker 命令提示 permission denied 当前账号没有 Docker 权限 命令前加 sudo,或切换到 root

令牌相当于这条隧道的钥匙,执行过的命令和 docker inspect 都能看到它。不要把命令截图发到群里;怀疑泄露时在控制台“连接凭证”里点“更换令牌”,再按上面的方法重建容器。

相关教程

第一次使用 · Linux 客户端(systemd) · 协议怎么选 · 访问故障排查