整理极空间时我试了件好玩的事:Docker 跑起马里奥,再用 cpolar 带到外网

前段时间遇到一个小问题,后来发现这是个挺常见的坑,顺手整理一篇笔记。

前言

前几天整理极空间的时候,我突然冒出一个挺不务正业的念头:

这台机器天天开着,Docker 也能跑,除了存文件、备份照片,还能不能干点更好玩的事?

我第一个想到的,就是小时候玩得最多的《超级马里奥》。

本来只是想随手试一下,没想到镜像拉下来、容器跑起来以后,浏览器里真的出现了那个熟悉的游戏画面。那一刻的感觉挺奇妙——平时摆在角落里的 NAS,突然像被塞进了一台小时候的游戏机。

我后来又顺手把这个页面通过 cpolar 带到了外网。这样一来,不一定非得坐在家里的电脑前,公司空闲时、出门坐地铁时,手机浏览器里也能打开。

这篇就是我把这次折腾过程重新整理了一遍。

我这次的想法很简单:

先让马里奥在极空间里真正跑起来,再想办法把这个页面从家里的局域网带出去。

不是为了把极空间包装成什么“全能游戏主机”,就是想看看这台 NAS 还能被我折腾出什么新玩法。

1. 先 SSH 进极空间

第一步,我先把极空间的 SSH 服务打开。

之后在 Windows PowerShell 或 Mac Terminal 里连接进去:

ssh root@IP

如果还没有配置过 SSH,可以参考 cpolar 官网对应的极空间 SSH 教程。

这一步对我来说没什么花活,目的就是拿到终端,后面 Docker 的所有操作都从这里做。

2. 先确认 Docker 是真的可用

SSH 连进去以后,我没有马上拉镜像,而是先看 Docker 状态。

我用的是下面这组命令:

docker -v
systemctl status -v

这里的命令我按当时的操作记录原样保留,没有自行修改。

确认 Docker 能正常用以后,我才继续下一步。

我一直算是喜欢这种顺序:环境没确认之前,不往后堆东西。

3. 把马里奥跑起来

先拉取镜像:

docker pull registry.cn-guangzhou.aliyuncs.com/os_cmty/os_cmty:mario

之后运行容器:

docker run -d -p 5000:8080 --name mario --restart=always registry.cn-guangzhou.aliyuncs.com/os_cmty/os_cmty:mario

这条命令里,我当时映射的是:

5000:8080

接着再看容器状态:

docker ps -a

看到容器正常运行以后,我就去浏览器里试页面。

这里有一个我在整理过程里专门保留的细节:

前面的 Docker 命令映射的是 5000:8080,但后面的访问记录写的是:

http://极空间IP:13378

这两个端口在记录里并不一致。我这次不会替自己“猜一个正确答案”再偷偷改掉,所以两个值都保留;后面 cpolar 的本地地址仍然按当时配置记录用 5000

页面真正打开以后,熟悉的马里奥界面就出来了。

我当时最意外的不是“网页里有个游戏”,而是操作起来确实有小时候那种感觉,连那些熟悉的玩法细节也还在。

说实话,折腾到这一步已经达到我最初的目的了:

极空间不只是把文件存起来,它真的能顺手跑一个我小时候天天玩的游戏。

4. 本地能玩以后,我又想把它带出去

本地页面已经能打开以后,我很自然就冒出了第二个念头:

既然它已经在极空间上跑着,为什么非得回家以后才能打开?

这不是我后来为了文章硬加的场景,而是这次折腾里我确实继续做下去的原因。

我平时极空间本来就是长期开机的。如果页面一直在机器上跑着,那我在公司空闲时,或者坐地铁的时候,掏出手机直接打开,不是更有意思吗?

所以这一步我没有再动马里奥容器本身,而是单独处理“怎么从外面访问”。

也就是说,这两层我分得很开:

  • Docker / 马里奥容器:负责游戏本身;
  • cpolar:只负责把本地 Web 页面带到公网。

5. 安装 cpolar

我先在极空间里安装 cpolar:

sudo curl https://get.cpolar.sh | sh

安装完成以后,查看服务状态:

sudo systemctl status cpolar

服务正常以后,通过极空间主机 IP + 9200 进入 cpolar Web 管理界面。

当时页面里写的是:

http://ip:9200

Markdown 链接目标则是:

http://localhost:9200/

这两个写法本身不一致,我也继续按原记录保留。

登录以后,就可以开始给马里奥页面建隧道。

6. 先用随机公网地址试通

我在【隧道管理 → 创建隧道】里建了一条新隧道。

当时配置的是:

  • 隧道名称:mali
  • 协议:http
  • 本地地址:5000
  • 域名类型:随机域名
  • 地区:China Top

这里也正好能看出为什么我前面没有擅自把 13378 改成“正确端口”——真正做公网访问时,我用的仍然是 5000

创建完成后,我去在线隧道列表里拿公网地址。

之后换到其他设备上测试。

页面能正常打开。

这一刻比本地打开页面更有意思,因为它证明这台放在家里的极空间,已经不只是“家里的游戏页面”了。

我确实可以在其他网络里打开它。

7. 随机地址能玩,再换固定地址

随机域名已经能用,但如果准备长期玩,每次记新地址还是有点烦。

所以我又给它保留了一个固定二级子域名。

地区选择:

china Top

我当时用的二级子域名是:

malii

然后回到 cpolar Web UI,在隧道列表里找到对应隧道,点击编辑。

把域名类型改成二级子域名:

  • 域名类型:二级子域名
  • Sub Domain:填写保留成功的二级子域名
  • 地区:China Top
更新。

再打开在线隧道列表,可以看到地址已经从随机形式切换成固定二级子域名。

最后我再用固定公网地址打开一次页面。

可以正常进入游戏页面以后,这次折腾才算真正结束。

总结

这次本来只是整理极空间时冒出来的一个念头:

NAS 能不能顺手跑个马里奥?

结果我一路从 Docker 拉镜像,真的把页面跑了起来;又觉得只在家里玩不过瘾,于是继续把 5000 端口通过 cpolar 带到了公网,最后还给它配了固定地址。

整条过程说实话很简单:

SSH → Docker → 马里奥容器 → 本地页面 → cpolar → 随机公网地址 → malii 固定二级子域名。

这篇最重要的也不是“极空间还能跑游戏”这个噱头,而是我这次真的重新认识了这台机器。

以前我更多把它当存储设备。

这次以后,我更愿意把它理解成一台一直在线、还能继续被我折腾的小服务器

只要 Docker 里有合适的东西,我总会忍不住想试试:

这个它还能不能跑?

至于原记录里“公司摸鱼、地铁继续玩、进度不丢”这些体验描述,我保留了这次远程访问的真实用方向,但没有继续扩大成所有网络、所有设备下都完全一致的性能结论。

还有一个技术差异也没有隐藏:

  • 容器命令映射的是 5000:8080
  • 后面浏览器访问记录写的是 极空间IP:13378
  • cpolar 本地地址则使用 5000
我没有替这几个值做推断式修正。

对我来说,这篇真正成立的经验就是:

先把一个好玩的念头在本地跑起来,跑通以后,再想办法把它带到自己真正会使用的地方。

今天的内容大概就这些,实际开发中大家还会遇到更多细节,欢迎留言分享自己的经验。

评论 (0)

暂无评论