新闻详情 资讯动态

全面了解最新资讯与建站知识,洞察行业趋势。

行业资讯

Windows 用 WSL2 + Docker 部署 OpenClaw 完整指南

发布时间:2026/10/8 8:57:45
Windows 用 WSL2 + Docker 部署 OpenClaw 完整指南 Windows 上跑 OpenClaw说难不难说简单也真没那么简单。折腾过一轮之后我的结论是用 WSL 2 装 Ubuntu再在 Ubuntu 里用 Docker 跑容器是当前最省心、最不容易把系统搞乱的方案。这篇文章就把我完整踩过一遍的流程、参数、坑和最终跑通的配置全部写出来从零开始跟着走就行。我默认你是这么个情况主力机是 Windows想在 Windows 上部署并运行 OpenClaw 这个开源引擎项目但不想在 Windows 原生环境里装一堆编译链和运行库也不想为此单独装一个完整的虚拟机。WSL 2 提供了轻量 Linux 子系统Docker 负责把 OpenClaw 的依赖全部隔离在容器里Ubuntu 则是容器和宿主机之间的桥梁三者配合既能享受 Linux 生态的便利又不破坏 Windows 本体的环境。1. 方案选型为什么是 WSL 2 Ubuntu Docker1.1 OpenClaw 只是引擎资源文件得另说先花半分钟说清楚 OpenClaw 是什么。OpenClaw 是一个开源的游戏引擎重实现项目目标是让经典平台动作游戏《Captain Claw》能够在现代操作系统上运行。注意它只包含引擎代码不包含游戏本体数据。也就是说你想把它跑起来手上必须有一份合法的游戏资源文件然后把资源目录挂载给引擎读取。这个定位决定了它的部署方式和常规「一条命令安装」的软件不太一样需要编译源码、准备资源、处理显示输出。这个特性带来的直接后果是你会同时遇到编译环境问题、运行库问题、路径问题和 GUI 显示问题。如果在 Windows 原生环境里硬搞光一个 SDL2 的版本兼容就能折腾一晚上。而在 Linux 容器里这些问题都变成「写进 Dockerfile 就行」的确定性操作。1.2 三种部署路线的对比我把常见方案都试了一遍逐个说结论。第一个方案是 Windows 原生编译。理论上可行OpenClaw 的代码中有 Windows 支持但实际操作时要处理 Visual Studio 工具链、CMake 生成器、Windows 版 SDL2 库、路径分隔符差异最恶心的是某些老代码在 MSVC 下的告警被当作错误处理改起来没完没了。适合想研究引擎源码的人不适合想快速玩游戏的人。第二个方案是完整虚拟机比如 VMware 或 Hyper-V 里装一个 Ubuntu 桌面版。优点是环境干净缺点是资源开销大开一个虚拟机吃 4GB 内存起步而且每次切换系统都要等启动流程文件共享、GPU 加速配置也麻烦。第三个方案就是本文主角WSL 2 Ubuntu Docker。WSL 2 本身就是一个轻量虚拟机但它有原生 Windows 集成、秒级启动、文件互通。Docker 在 WSL 2 里跑 Linux 容器几乎和原生 Linux 上跑没有性能差异。OpenClaw 对图形的要求不高SDL 2 软件渲染就够所以完全不需要 GPU 直通这类高级特性。这套组合的实际体验是部署过程线性可控出了问题也能精确复现。1.3 WSL 2 的底层原理和性能特点聊一点底层的东西方便你理解后面为什么会有那些坑。WSL 2 基于 Hyper-V 虚拟化平台整个 Linux 内核跑在一个轻量虚拟机里所以它和 Windows 之间是「跨虚拟化边界通信」而不是传统意义上的进程互调。这个架构带来两个直接影响。一是在 WSL 2 内部访问/mnt/c/这类 Windows 文件系统时性能会比访问 Linux 原生文件系统差不少。所以我的原则是一切容器、源码、数据文件都放在 WSL 2 的 Linux 文件系统里比如~/openclaw不要放到/mnt/c/Users/...。二是内存管理上WSL 2 默认会吃掉宿主机最多 50% 的内存看起来非常吓人后面我会给出限制方案。这里推荐一篇文章如果你对 WSL 2 的虚拟化原理和 Hyper-V 的调度策略感兴趣可以系统了解。2. 环境准备把 Windows 变成能跑容器的机器2.1 WSL 2 的启用和 Ubuntu 安装首先确认系统版本。Windows 10 2004 及以上或者 Windows 11都自带完整的 WSL 2 支持。老版本建议直接升级系统不要在旧版上折腾。以管理员身份打开 PowerShell执行wsl --install -d Ubuntu-24.04这个命令会启用 WSL 功能、安装 WSL 2 内核并自动把 Ubuntu 24.04 LTS 装好。安装完成后重启机器Ubuntu 终端会自动弹出第一次启动会让你设置用户名和密码。这个用户会拥有 sudo 权限记住它的密码后面所有需要提权的操作都得靠它。安装完成后确认一下 WSL 2 已经生效wsl -l -v如果看到 Ubuntu 的 VERSION 列是 2就没问题。如果显示的是 1执行wsl --set-version Ubuntu-24.04 2手动转换。2.2 把 Ubuntu 发行版挪到 D 盘说句实话WSL 2 默认把所有发行版文件放在 C 盘%LOCALAPPDATA%下面这非常占地方。如果你 C 盘本来就不宽裕建议一上来就把 Ubuntu 迁移到其他盘省得后面磁盘满了再折腾。操作分三步全部在 Windows 侧 PowerShell 完成wsl --shutdown wsl --export Ubuntu-24.04 D:\wsl-backup\ubuntu-24.04.tar wsl --unregister Ubuntu-24.04wsl --unregister会删除当前发行版的所有数据所以必须先导出备份。备份完成后你在 D 盘建一个目录比如D:\WSL\Ubuntu-24.04然后执行wsl --import Ubuntu-24.04 D:\WSL\Ubuntu-24.04 D:\wsl-backup\ubuntu-24.04.tar注意一个细节用--import恢复的发行版默认登录用户是 root。所以还要在 Ubuntu 终端里执行一次sudo nano /etc/wsl.conf在[user]一节中写入[user] default你的用户名保存后重新进入即可恢复普通用户身份。2.3 Docker 安装Docker Desktop 与 Docker Engine 怎么选这里有两种路线我分别说。第一种是装 Docker Desktop for Windows然后启用它和 WSL 2 的集成。Docker Desktop 在 Windows 系统栏常驻提供一个图形界面适合平时对命令行不熟的读者。它会在后台调用 WSL 2 的虚拟机并把 WSL 2 里的发行版拉入 Docker 生态具体表现是Ubuntu 终端里敲docker命令可以直接用且和桌面版共享同一个守护进程。第二种是只装 Docker Engine完全在 Ubuntu 内部操作。方式如下sudo apt update sudo apt install docker.io docker-compose-plugin sudo systemctl enable docker sudo usermod -aG docker $USER装完之后重新登录 WSLdocker version能看到客户端和服务端版本就成功了。我个人推荐第二种。原因很直白我们部署 OpenClaw 只需要在 Ubuntu 内部用命令行操作Docker Desktop 的图形界面在这里属于多余负载还会抢占系统资源和托盘空间。而且 Docker Desktop 的许可和自动更新策略可能时不时给你「惊喜」在纯粹的 WSL 2 工作流里Docker Engine 够用且干净。提示加入docker组之后必须重新打开终端才生效。如果不生效就重启 WSL不要一直在命令前挂sudo否则文件的属主乱套只是时间问题。2.4 用 .wslconfig 限制内存和 CPUWSL 2 有个默认行为最多吃宿主机 50% 的内存。对机器内存不太大的用户来说这会造成 Docker 编译镜像时 Windows 侧变卡。我建议在 Windows 用户目录下创建.wslconfig文件写入[wsl2] memory6GB processors4 swap2GBmemory限制 WSL 2 最大内存processors限制可用的 CPU 核心数swap设置交换文件大小。配置改完之后执行wsl --shutdown再重进配置生效。我自己设的是memory8GB因为 OpenClaw 编译时的 SDL 依赖和链接阶段比较占内存太小容易 OOM。这里想额外提醒一点.wslconfig是 Windows 侧的全局配置不要放在 Linux 目录里。路径是C:\Users\你的用户名\.wslconfig。3. 部署 OpenClawDockerfile 到容器运行3.1 拉取源码和准备游戏资源环境准备好之后进入实操。首先在 Ubuntu 里建目录拉源码mkdir -p ~/openclaw/gamedata cd ~/openclaw git clone https://github.com/OpenClaw/OpenClaw.git这里注意目录规划的用意~/openclaw/gamedata是留给游戏资源文件的~/openclaw/OpenClaw是源码目录。后续容器运行时会通过卷映射把gamedata挂载进去所以不要在源码目录里乱放资源。游戏资源文件通常是claw.rem或CLAW.RES这类数据包以及DATA子目录下的若干资源子目录。把完整资源目录复制到~/openclaw/gamedata/下即可。注意不要拿着破解版资源来问为什么报错我只建议使用你自己合法拥有的游戏数据。3.2 多阶段构建的 Dockerfile 逐段解释我直接用多阶段构建方案因为 OpenClaw 的编译依赖和运行依赖是两回事。编译阶段需要完整的工具链运行阶段只需要几个动态库两段分离能显著缩小最终镜像体积。在~/openclaw/下创建Dockerfile# 阶段一编译 FROM ubuntu:24.04 AS builder RUN apt-get update \ DEBIAN_FRONTENDnoninteractive apt-get install -y \ build-essential cmake git pkg-config \ libsdl2-dev libsdl2-net-dev libogg-dev libvorbis-dev \ rm -rf /var/lib/apt/lists/* COPY OpenClaw /src/OpenClaw WORKDIR /src/OpenClaw/build RUN cmake .. -DCMAKE_BUILD_TYPERelease \ make -j$(nproc) # 阶段二运行 FROM ubuntu:24.04 RUN apt-get update \ DEBIAN_FRONTENDnoninteractive apt-get install -y \ libsdl2-2.0-0 libsdl2-net-2.0-0 libogg0 libvorbis0a \ rm -rf /var/lib/apt/lists/* COPY --frombuilder /src/OpenClaw/build/openclaw /usr/local/bin/ WORKDIR /data ENTRYPOINT [openclaw]逐段说几个关键点。libsdl2-dev和libsdl2-net-dev是 OpenClaw 编译时必须的开发包SDL 2 处理窗口、输入、音频SDL_net 处理网络对战或局域网功能。如果你后续想编译启用局域网对战的版本这两项缺一不可。cmake .. -DCMAKE_BUILD_TYPERelease中的Release是必须的。默认的Debug构建产物体积大、帧率低而且链接时间明显更长对游戏运行没有任何好处。make -j$(nproc)的并行任务数直接取容器内的 CPU 核心数。这里有个参数相关的坑nproc在 WSL 2 里读到的是你分配给 WSL 的核心数不是宿主机总核心数所以不用担心把机器榨干。3.3 构建镜像时常见的几个坑构建过程中最容易翻车的是 apt 源网络问题和编译内存不足。apt 源的问题表现是apt-get update卡在某个连接上。如果你所在网络访问默认源速度慢可以换成国内镜像源把sources.list中的archive.ubuntu.com替换成镜像站点地址。注意替换之后要执行apt-get clean再重新 update。内存不足的表现是编译过程中直接报Killed没有任何具体的编译错误信息。这多半就是 OOM。解决办法就是前面说的.wslconfig里增加memory另外可以在make时降并行度make -j2。这个参数不是越大越好机器总内存小就老实点。构建命令cd ~/openclaw docker build -t openclaw:latest .构建成功后docker images应该能看到openclaw:latest体积控制在 200MB 左右是比较健康的如果超过 500MB八成是第一阶段把不需要的包装进了第二阶段回头检查一下FROM ubuntu:24.04那一段的 apt 安装列表。3.4 容器运行参数与游戏资源挂载构建完成后就可以运行了。OpenClaw 需要读取游戏资源同时需要一个图形输出来显示画面。先说资源卷映射docker run -it --rm \ -v ~/openclaw/gamedata:/data \ -e DISPLAY$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix:rw \ openclaw:latest拆解每一个参数-it是分配交互式终端因为 OpenClaw 运行时会在终端输出日志而且某些情况下需要键盘交互。--rm是退出即删除容器避免反复测试后堆积无用容器。-v ~/openclaw/gamedata:/data把宿主机资源目录映射到容器内/dataOpenClaw 默认工作目录就是/data。这一步是路径挂载的关键不做这步它什么都读不到。-e DISPLAY$DISPLAY和-v /tmp/.X11-unix:/tmp/.X11-unix:rw是 Linux 图形程序联网的经典组合。前者告诉 SDL 2 图形输出到哪里后者把 X11 的 Unix Socket 映射进容器图形才能显示到 WSLg 上。3.5 显示输出WSLg 与 X Server 两套方案Windows 11 和较新的 Windows 10 自带 WSLg也就是 WSL 2 的图形界面支持默认 DISPLAY 变量已经帮你设好了不需要额外安装任何软件。如果你的系统较老或者 WSLg 失效就需要自己安装 Windows 侧的 X Server。这里我把两套方案放在一起对比方案适用场景配置成本稳定性WSLgWindows 11 / 新版 Win10零配置高Windows X Server旧版 Win10中等较高如果走 X Server 方案典型配置是在 Windows 侧启动 VcXsrv然后在 Ubuntu 里执行export DISPLAY$(cat /etc/resolv.conf | grep nameserver | awk {print $2}):0这行命令很经典Kali Linux 官方文档也推荐使用它原因在于 WSL 2 的 NAT 网络模式下Windows 宿主机地址不能通过ip route直接拿到但/etc/resolv.conf里的 DNS 服务器通常是宿主机 IP于是就被拿来当 X Server 的主机地址。实测下来WSLg 方案的延迟比 Windows X Server 低画面也更流畅。建议优先用 WSLg跑不起来再换 X Server。4. 实战中踩过的坑与排查方法4.1 Docker 守护进程起不来或启动失败症状敲docker version显示 Server 部分报错或者docker run提示Cannot connect to the Docker daemon。先排除最简单的情况如果你装的是 Docker Engine而不是 Desktop检查 docker 服务是否在运行sudo service docker status sudo service docker startWSL 2 里的 Docker Engine 有时候不会自动启动因为 WSL 没有一个类似systemd的正常开机流程。Ubuntu 24.04 已经默认支持 systemd所以理论上sudo systemctl enable docker就能开机启动。如果你发现没生效就在~/.bashrc末尾加一行service docker start这不优雅但有效。还有一个比较隐蔽的坑Docker Desktop 装了但没启用 WSL 2 集成导致 Ubuntu 里敲docker找不到命令。去 Docker Desktop 的 Settings 里的 Resources - WSL Integration 中把 Ubuntu 的开关打开重启 WSL 即可。4.2 容器跑起来但黑屏或窗口不出现这个问题非常典型有三个方面排查。第一检查DISPLAY变量是否真的传进容器了。进入容器确认docker run -it --rm -e DISPLAY$DISPLAY openclaw:latest env | grep DISPLAY如果输出为空说明宿主机变量的值本来就没设置。WSLg 环境下检查 Windows 侧的.wslconfig看是否配置了guiApplicationstrue这个配置项突然被关掉也会导致看不到窗口。第二检查~/.Xauthority的问题。WSLg 有时会生成一个$HOME/.Xauthority文件里面包含访问控制凭据。容器里没有这个文件X 服务器可能拒绝连接。临时验证的方法是在docker run时加一个参数禁掉访问控制-e XAUTHORITY/tmp/.Xauth \但这只是测试手段。更稳妥的做法是给运行用户挂载 Home 目录或者把一个固定的 Xauthority 文件映射进去。第三SDL 2 有可能会强制走offscreen模式。试试加环境变量-e SDL_VIDEODRIVERx11x11是让 SDL 2 显式走 X11避免它自己探测到 Wayland 或其他后端导致行为异常。4.3 音频、键位、存档丢失问题OpenClaw 这个年代的引擎对音频设备的要求很朴素SDL 2 需要访问声卡设备。如果你在容器里跑起来发现没有声音先看音频设备映射docker run -it --rm \ --device /dev/snd \ --group-add audio \ ...--device /dev/snd把 WSL 2 内暴露的声卡设备映射进容器--group-add audio把 audio 组权限附加进去。注意 WSL 2 默认可能没有暴露/dev/snd这时候需要在 Windows 侧启动 WSL 后手动检查ls /dev/snd如果目录不存在大概率是因为 WSL 2 对音频设备支持不完整。可以安装 PulseAudio 并在 Windows 侧跑一个 PulseAudio 服务端但这个方案配置比较复杂我没深入研究过。如果你只是想确保游戏跑起来先接受无声把精力放在画面和控制上。键位和存档的坑集中在文件路径。OpenClaw 的存档默认写在运行目录下如果你把容器-v ~/openclaw/gamedata:/data挂载上去存档就会落在宿主机~/openclaw/gamedata/下这是好事因为容器删除后存档不丢。但要注意.openclaw之类带点的隐藏目录如果游戏写到了/root或/home/xxx反倒麻烦了。解决办法是给容器加一个VOLUME /root或者在进入容器时设置HOME/data-e HOME/data这样引擎在运行时找用户目录的路径就会切到挂载盘上。4.4 磁盘占用膨胀与文件权限混乱用 Docker 部署 OpenClaw 之后磁盘占用有三大来源镜像本体、构建缓存、容器日志。镜像本体一般 200MB 左右不用管但 Docker 构建缓存在反复改 Dockerfile 时会越积越多。清理命令docker system prune -f docker system dfdocker system df能看清每一类资源的占用。如果休眠容器很多用docker container prune清掉写着Exited的容器。这里要注意docker system prune -f会连无用镜像一起删如果某些镜像你还有用但暂时没跑容器也会被清掉使用前留意一下docker images里的结果。文件权限混乱的表现是容器创建的文件在宿主机上属主是 root你用普通用户删除时需要加sudo。这其实是 Linux 容器默认行为因为容器内默认用户是 root宿主机上的 UID 映射对不上。解决思路有两个一是运行容器时指定当前用户 UID二是运行容器后执行sudo chown -R 你的用户名:你的用户名 ~/openclaw。我一般选后者更省事。5. 部署完之后说几句大实话写到这里整个流程已经完整跑通了。从 WSL 2 的安装、磁盘迁移、Docker 环境搭建到 OpenClaw 的多阶段构建、卷挂载、图形输出再到实战中遇到的几个最具代表性的问题相信你跟着操作比我自己第一次部署要顺利得多。最后分享两个我个人的操作习惯。第一给 WSL 2 的.wslconfig里配一个足够大的memory8GB是有必要的OpenClaw 本身不占多大但 Docker 构建阶段和 WSL 2 的整体开销加在一起内存太小容易莫名其妙卡顿。第二建议把~/openclaw整个目录定期打包备份尤其是gamedata里的存档和资源文件容器可以随时重建但游戏进度丢了就真的找不回来了。OpenClaw 的容器化部署到这里就是一个完整闭环。如果你想继续扩展可以在 Docker Compose 里把资源目录、音频设备、X11 socket、用户 UID 这些配置固化成一份compose.yaml下次只需要docker compose up一条命令就能进入游戏这个留给你自己做过程比结果更有意思。

想做一个「会获客」的企业网站?

留下需求,1 小时内获取专属建站方案与透明报价。

免费咨询方案
↑