首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >想把《仙剑》《大富翁》搬进浏览器?Docker + cpolar 搭一套 DOS 怀旧游戏库

想把《仙剑》《大富翁》搬进浏览器?Docker + cpolar 搭一套 DOS 怀旧游戏库

作者头像
fruge365
发布2026-09-22 08:07:06
发布2026-09-22 08:07:06
410
举报

想把《仙剑》《大富翁》搬进浏览器?Docker + cpolar 搭一套 DOS 怀旧游戏库

前言

我对 DOS 游戏的记忆,已经不是单纯的“老”。黑底白字、手敲命令、声卡 IRQ 和 DMA,这些今天看起来有点笨拙的东西,当年却是进入游戏世界前必须经历的一部分。现在再让我为了玩一局怀旧游戏重新折腾整套 DOS 环境,我大概没那个耐心;但如果能把这些游戏封进 Docker,最后只留一个浏览器入口,反而很符合现在的使用习惯。对我来说,这类项目最有意思的地方,就是用今天的部署方式,把过去那套操作体验重新叫回来。我也不想为了情怀把部署复杂化,能用容器解决的就尽量别再手工配一整套老环境,怀旧应该留在游戏里,而不是留在安装过程里。

这次我在 Linux 上部署 oldiy/dosgame-web-docker,保留两种方式:一种直接用镜像里的 40 多款经典游戏,适合磁盘空间有限的机器;另一种额外挂载 chinese-dos-games,按现有流程下载更大的游戏库。服务统一映射到 8090,先在局域网浏览器里打开,再安装 cpolar,把 DOS 游戏页面提供到公网,最后配置固定二级子域名 doss。我会把“游戏库规模”“Docker 服务是否跑通”和“公网入口是否可用”分开说明,不因为页面能打开,就把每一款游戏都写成已经逐个验证。

image-20250926140227845
image-20250926140227845

1. 这次不是重新装 DOS,而是把游戏做成一个 Web 入口

我更喜欢把这套方案理解成:

Linux → Docker → DOS 游戏 Web 服务 → 浏览器访问。

以前启动游戏,要进目录、敲命令、记路径。

现在真正需要操作的,是 Docker 容器和一个 Web 端口。

怀旧感留给游戏本身,部署过程尽量按现代方式来。

2. 先准备部署目录

这次本地环境使用 Linux。

不同系统只要 Docker 能正常运行,整体思路接近;下面的命令按现有 Linux 环境继续。

先切换到 root,并创建安装目录:

代码语言:javascript
复制
sudo -i
mkdir -p /root/data/docker_data/games
cd /root/data/docker_data/games
69f6e1e0f6911fe9a1ba25b028327d0a
69f6e1e0f6911fe9a1ba25b028327d0a

后面的 docker-compose.yml、游戏库目录和相关文件都放在:

/root/data/docker_data/games

下面。

3. 创建 docker-compose.yml

进入目录后创建:

代码语言:javascript
复制
vim docker-compose.yml

接下来有两种部署方式。

这两个方案最大的区别,不是容器本身,而是游戏资源从哪里来、要占多少空间

3.1 方案一:直接使用镜像里的 40 多款经典游戏

如果服务器磁盘不大,可以先用精简方式。

配置如下:

代码语言:javascript
复制
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'

这里没有启用额外的 volumes 挂载。

核心参数是:

  • 容器名:dosgame
  • 宿主机端口:8090
  • 容器端口:262
  • 镜像:oldiy/dosgame-web-docker:latest

8090 如果被其他服务占用,可以换成服务器上没有被占用的端口。

3.2 方案二:挂载更大的 chinese-dos-games 游戏库

如果服务器硬盘空间充足,可以使用带外部游戏目录的配置:

代码语言:javascript
复制
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'

这一版多了:

/root/data/docker_data/games/chinese-dos-games:/app/static/games

也就是说,游戏资源不再只依赖镜像内置内容,而是把宿主机上的游戏库挂进容器。

63a2ce8db633cf81633e551a4d66a729
63a2ce8db633cf81633e551a4d66a729

这里会看到两个数量口径:

  • 部署说明把这一套称为“1989 款游戏”;
  • 后面下载完成后,又用 bin 目录普通文件数量 1898 作为正常结果。

实际操作时,我不会把这两个数字简单当成同一个统计口径,重点还是确认资源是否下载完整、容器能否正常读取。

4. 克隆 chinese-dos-games

如果选择大游戏库方案,先进入:

/root/data/docker_data/games/

然后执行:

代码语言:javascript
复制
cd /root/data/docker_data/games/
git clone https://github.com/rwv/chinese-dos-games.git

如果提示没有安装 Git,会出现类似报错。

47ef556ab8c2920e35112f40a95a1c16
47ef556ab8c2920e35112f40a95a1c16

先更新系统:

代码语言:javascript
复制
yum update -y
d9798c23e11f50b91a172cd83665cb00
d9798c23e11f50b91a172cd83665cb00

再安装 Git:

代码语言:javascript
复制
yum install -y git
56548cd93d0d30d1720264bf2891057c
56548cd93d0d30d1720264bf2891057c

安装完成后继续克隆。

47d47ee4ec9c39a42c80edc2e40f053b
47d47ee4ec9c39a42c80edc2e40f053b

5. 下载游戏数据

进入 chinese-dos-games 对应目录后,按流程执行:

代码语言:javascript
复制
python3 download_data.py
ad53eda1aae463c6be213f6e450309ef
ad53eda1aae463c6be213f6e450309ef

如果系统还没有 Python3,可以执行:

代码语言:javascript
复制
yum update -y        
yum install -y python3

游戏下载完成以后,统计 bin 目录中的普通文件数量:

代码语言:javascript
复制
ls -l /root/data/docker_data/games/chinese-dos-games/bin | grep "^-" | wc -l
8ee8fec76d525f4bce3b6881de3e2534
8ee8fec76d525f4bce3b6881de3e2534

这里给出的正常数量是:

1898

我会把它当成这套下载流程里的完整性检查之一,而不是直接等同于“浏览器里一定有 1898 款全部可玩”。

6. 启动 Docker 服务

游戏资源准备好以后,回到部署目录:

代码语言:javascript
复制
cd /root/data/docker_data/games
docker-compose up -d
bae6359a9a0929f7782c0b657fad0c75
bae6359a9a0929f7782c0b657fad0c75

如果系统里没有 docker-compose,按当前步骤安装:

代码语言:javascript
复制
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

安装以后再执行:

docker-compose up -d

容器启动成功后,就可以通过:

Linux 主机 IP + 8090

在 Windows 浏览器里打开页面。

f44098096c1e25d658c1a13da8ff5bd2
f44098096c1e25d658c1a13da8ff5bd2

到这里,局域网里的 DOS 游戏站已经能访问。

fb60b26466e4f57b8ed6b25157326650
fb60b26466e4f57b8ed6b25157326650

对我来说,这才是第一层验证:

Docker 容器启动 → 8090 端口可访问 → 浏览器能进入游戏页面。

至于不同游戏的兼容情况,仍然需要实际逐个运行。

7. 局域网能玩以后,再考虑分享给朋友

如果只是自己在家里玩,局域网地址已经够用。

但想让朋友从另一张网络直接打开页面,本地 IP 就不够了。

这里再加 cpolar。

cpolar 在这套方案里只负责:

把 DOS 游戏 Web 服务的 8090 端口提供到公网。

它不负责模拟 DOS,也不负责游戏资源本身。

所以角色可以拆成:

Docker / DOS 游戏站负责运行 → cpolar 负责公网入口。

8. 安装 cpolar

执行:

代码语言:javascript
复制
sudo curl https://get.cpolar.sh | sh
image-20250829153042018
image-20250829153042018

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

代码语言:javascript
复制
sudo systemctl status cpolar
image-20250829153133891
image-20250829153133891

服务正常后,在浏览器打开:

虚拟机主机 IP + 9200

这次示例使用:

http://192.168.42.100:9200

页面链接目标同时写成:

http://localhost:9200/

实际使用时,以当前机器能够访问到的 cpolar Web UI 地址为准。

image-20250829153153914
image-20250829153153914

登录后,就可以开始创建 DOS 游戏站对应的公网隧道。

9. 给 8090 创建随机公网地址

进入:

隧道管理 → 创建隧道

参数为:

  • 隧道名称:dos
  • 协议:http
  • 本地地址:8090
  • 域名类型:随机域名
  • 地区:China Top
79e3f905bdddbd38fda7a8f740d2951b
79e3f905bdddbd38fda7a8f740d2951b

创建成功后,打开在线隧道列表。

00cd5e99337341402f7b4d6b782ee4a0
00cd5e99337341402f7b4d6b782ee4a0

使用生成的公网地址,从其他电脑或移动设备访问。

页面能够正常打开。

c510fa0d26e0c16fbbc95306c2a862df
c510fa0d26e0c16fbbc95306c2a862df

这一层真正验证的是:

DOS 游戏站 8090 → cpolar HTTP 公网地址 → 外部浏览器。

如果准备长期分享,接下来再把随机地址换成固定入口。

10. 配置固定二级子域名

进入 cpolar 预留页面,选择:

保留二级子域名

image-20250926143721334
image-20250926143721334

这里填写:

  • 地区:china Top
  • 二级子域名:doss
image-20250926144148089
image-20250926144148089

二级子域名需要以账号实际保留成功的名称为准。

然后回到:

隧道管理 → 隧道列表

这里页面说明里写成了:

plex

隧道。

image-20250926144220960
image-20250926144220960

但前面真正创建的 DOS 游戏隧道名称是:

dos

这两个名字并不一致。

实际操作时,我会先确认哪条隧道真正指向本地 8090,再编辑那一条,而不是只看名字。

接着修改:

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

点击更新。

image-20250926144304413
image-20250926144304413

更新以后进入在线隧道列表。

image-20250926144344168
image-20250926144344168

此时随机公网地址已经切换成固定二级子域名形式。

最后再用固定公网地址访问。

image-20250926144428661
image-20250926144428661

页面可以正常打开。

到这里,长期分享入口已经配置完成。

总结

我喜欢这种 DOS 项目的原因,不只是“又能玩老游戏了”。

更有意思的是,过去需要自己记命令、配环境、守着一台旧电脑玩的东西,现在可以被放进 Docker,最后通过浏览器打开。

这次实际跑通的主线是:

Linux → /root/data/docker_data/gamesoldiy/dosgame-web-docker:latest8090:262 → 40 多款内置方案 / chinese-dos-games 外挂方案 → download_data.pydocker-compose up -d → 局域网访问 → cpolar → 随机公网 → 固定二级子域名 doss

几个地方需要特别留意:

  • 40 多款方案不挂载外部 chinese-dos-games 目录;
  • 大游戏库方案需要额外克隆仓库并执行 python3 download_data.py
  • “1989 款”和下载完成后的 1898 普通文件数量是两种不同表述,不要在没有进一步核对时直接合并成一个数字;
  • 8090 是宿主机 Web 访问端口,容器内部映射到 262
  • cpolar 只负责 8090 的公网入口,不参与游戏模拟;
  • 固定地址阶段说明里出现 plex 隧道名,但前面创建的是 dos,真正操作时要确认编辑的是指向 8090 的隧道;
  • 固定二级子域名 doss 解决的是分享地址变化问题,不代表每一款游戏都已经逐个验证兼容。

如果只是想偶尔怀旧,装一个本地模拟器当然更直接;但如果想把一整套 DOS 游戏做成浏览器入口,再从另一台电脑、手机或者朋友的设备打开,这种 Docker 化的玩法会更有意思。怀旧的是游戏,部署方式却已经完全是今天的样子。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 想把《仙剑》《大富翁》搬进浏览器?Docker + cpolar 搭一套 DOS 怀旧游戏库
    • 前言
    • 1. 这次不是重新装 DOS,而是把游戏做成一个 Web 入口
    • 2. 先准备部署目录
    • 3. 创建 docker-compose.yml
      • 3.1 方案一:直接使用镜像里的 40 多款经典游戏
      • 3.2 方案二:挂载更大的 chinese-dos-games 游戏库
    • 4. 克隆 chinese-dos-games
    • 5. 下载游戏数据
    • 6. 启动 Docker 服务
    • 7. 局域网能玩以后,再考虑分享给朋友
    • 8. 安装 cpolar
    • 9. 给 8090 创建随机公网地址
    • 10. 配置固定二级子域名
    • 总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档