前言

有些游戏,其实已经很多年没有真正打开过了。

《仙剑奇侠传》《大富翁》,还有那些现在连名字都未必能一下想起来的 DOS 小游戏,当年可能要从软盘、光盘或者别人拷来的文件夹里运行。黑色的 DOS 界面、简单的像素画面、并不算顺手的操作,现在再看当然谈不上精致,但只要启动画面和音乐一出来,还是很容易让人想起以前坐在电脑前折腾游戏的那段时间。

前段时间我看到一个 Chinese DOS Games 项目,里面整理了大量中文 DOS 游戏,于是有了一个想法:既然现在家里的 Linux 服务器常年开着,为什么不直接把这些老游戏放到 Docker 里跑?

这样做和单纯在电脑上安装一个 DOSBox 有点不一样。游戏服务运行在服务器上,客户端不需要再准备模拟器,也不用到处找对应的游戏文件。Docker 容器启动以后,直接在浏览器里访问服务器的 IP 和端口,就能进入 DOS 游戏页面。换一台电脑,甚至换成手机和平板,入口还是同一个。

这次部署我准备了两种方式。如果只是想偶尔玩玩《仙剑》《大富翁》这些比较熟悉的作品,可以直接使用已经封装好的镜像,里面大约有 40 多款经典 DOS 游戏,对硬盘空间的要求比较低。如果服务器容量比较充裕,还可以把 chinese-dos-games 项目完整下载下来,挂载到容器中,原文这套资源准备完成后可以提供接近两千款游戏,适合把它长期做成自己的 DOS 游戏库。

不过服务器里的网页服务默认只能在局域网使用。比如这次 Docker 映射的是 8090 端口,在家里访问 服务器IP:8090 没问题,离开家里的网络以后,这个地址自然就打不开了。

我又在服务器上加了 cpolar 内网穿透,把 DOS 游戏网页所在的 8090 端口映射到公网。这样服务器仍然放在家里,Docker 也不用重新部署,只是多了一个可以从外部网络访问的网址。人在外面用电脑或者手机打开这个地址,一样可以进入自己的 DOS 游戏页面;如果想把地址分享给朋友,也不需要让对方安装额外的软件。

所以这次要做的事情并不复杂:先用 Docker 把 DOS 游戏库跑起来,确认局域网可以正常访问,再把这个 Web 服务接到公网。如果准备长期保留,还可以继续配置固定二级子域名,让游戏入口不再随着随机地址变化。

三十年前需要在 DOS 命令行里启动的游戏,现在放进 Docker,再通过浏览器打开,这种组合本身就挺有意思。下面就从服务器上的部署目录开始,把这套网页版 DOS 游戏库一步一步搭起来。

image-20250926140227845

1.Docker部署DOS

我本地是在linux上部署,大家不管什么系统只要有docker步骤都大同小异。

首先切换到root用户,然后输入以下命令创建安装目录:

sudo -i
mkdir -p /root/data/docker_data/games
cd /root/data/docker_data/games

69f6e1e0f6911fe9a1ba25b028327d0a

创建部署脚本:

vim docker-compose.yml

这边有两种搭建方式,因为36G的游戏做成docker的镜像太大了,所以我只是将40多个经典的DOS游戏封装到了docker的镜像里面,所以你的服务器如果硬盘不够大,可以直接用默认的方式安装。

安装40多个经典游戏:

version: '3.3'
services:
    dosgame-web-docker:
        container_name: dosgame
        ports:
            - '8090:262'  #8090可以改成其他服务器没被占用的端口
#         volumes:
#             - '/root/data/docker_data/games/chinese-dos-games:/app/static/games'
        image: 'oldiy/dosgame-web-docker:latest'

安装1989款游戏:

version: '3.3'
services:
    dosgame-web-docker:
        container_name: dosgame
        ports:
            - '8090:262'  #8090可以改成其他服务器没被占用的端口
        volumes:
            - '/root/data/docker_data/games/chinese-dos-games:/app/static/games'
        image: 'oldiy/dosgame-web-docker:latest'

63a2ce8db633cf81633e551a4d66a729

在games目录下部署chinese-dos-games:

cd /root/data/docker_data/games/
git clone https://github.com/rwv/chinese-dos-games.git

若显示如下错误,证明还没有安装git,安装即可:

47ef556ab8c2920e35112f40a95a1c16

yum update -y

d9798c23e11f50b91a172cd83665cb00

yum install -y git

56548cd93d0d30d1720264bf2891057c

继续部署:

47d47ee4ec9c39a42c80edc2e40f053b

部署完成后,继续下面操作:

python3 download_data.py

ad53eda1aae463c6be213f6e450309ef

若没有Python可以执行:

yum update -y        
yum install -y python3

安装完以后统计bin目录中“普通文件”的数量,正常是1898(安装40多款经典游戏的):

ls -l /root/data/docker_data/games/chinese-dos-games/bin | grep "^-" | wc -l

8ee8fec76d525f4bce3b6881de3e2534

继续切换到这个目录,启动并运行一个由 docker-compose.yml 定义的多容器应用:

cd /root/data/docker_data/games
docker-compose up -d

bae6359a9a0929f7782c0b657fad0c75

若是没有docker-compose,可以用下列命令安装:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.7/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version

接下来使用linux的ip+8090端口就可以在Windows浏览器打开啦!

f44098096c1e25d658c1a13da8ff5bd2

然后就可以玩专属于我们的青春回忆啦!

fb60b26466e4f57b8ed6b25157326650

在复古计算环境中,DOS 系统虽已远离主流,但通过 DOSBox 等模拟器仍可运行经典游戏或程序。结合 cpolar 这类内网穿透工具,可以将本地运行的 DOS 应用暴露到公网,实现远程访问。例如,在本地启动一个 DOS 游戏网页界面后,可生成一个公网 URL,让他人通过浏览器实时体验“仙剑奇侠传”等怀旧游戏,无需复杂配置,实现“复古+互联”的趣味结合。

接下来跟我一起部署cpolar让你的朋友们也玩起来吧!

2.安装cpolar实现随时随地开发

cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。

❤️以下是安装cpolar步骤:

使用一键脚本安装命令:

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

image-20250829153042018

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

sudo systemctl status cpolar

image-20250829153133891

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【http://192.168.42.100:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

image-20250829153153914

4.配置公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:

  • 隧道名称:可自定义,本例使用了:dos,注意不要与已有的隧道名称重复

  • 协议:http

  • 本地地址:8090

  • 域名类型:随机域名

  • 地区:选择China Top

79e3f905bdddbd38fda7a8f740d2951b

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用地址访问。

00cd5e99337341402f7b4d6b782ee4a0

访问成功。

c510fa0d26e0c16fbbc95306c2a862df

4.保留固定公网地址

使用cpolar为其配置二级子域名,该地址为固定地址,不会随机变化。

image-20250926143721334

点击左侧的预留,选择保留二级子域名,地区选择china Top,然后设置一个二级子域名名称,我这里演示使用的是doss,大家可以自定义。填写备注信息,点击保留。

image-20250926144148089

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道plex,点击右侧的编辑

image-20250926144220960

修改隧道信息,将保留成功的二级子域名配置到隧道中

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

点击更新

image-20250926144304413

更新完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。

image-20250926144344168

最后,我们使用固定的公网地址在任意设备的浏览器中访问,可以看到成功访问本地部署的DOS页面,这样一个永久不会变化的二级子域名公网网址即设置好了。

image-20250926144428661

这样,朋友也可以通过我们的链接来访问啦,是不是很方便呢~

总结

整个部署完成以后,这套 DOS 游戏库其实就变得很简单了:Docker 负责把模拟环境和游戏页面长期运行在服务器上,浏览器负责充当客户端,cpolar 则把原本只能通过局域网访问的 8090 端口扩展到外网。以后不管换电脑还是换网络,只要浏览器还能打开这个地址,就能回到自己的游戏列表。

当然,近两千款游戏全部下载下来会占用不少存储空间,如果只是偶尔怀旧,没有必要为了数量把整个游戏库都装进去,直接使用包含 40 多款经典游戏的镜像反而更省事。服务器性能、网络情况以及具体游戏的兼容性,也都会影响实际体验。

但把这些老 DOS 游戏放在一台今天仍然常开的服务器里,确实比让它们继续躺在某个多年没打开的文件夹里更实用。想玩的时候打开浏览器就能进入,想和朋友一起回忆一下,也可以把自己的游戏页面分享出去。对于手里本来就有 Docker 服务器的人来说,这算是一个成本不高、也挺有意思的怀旧玩法。

更多推荐