上个月我把 OpenClaw 从 Windows 裸机环境搬进 Docker 的那一刻,第一反应是:这种带“爪子”的智能体程序,本来就该被关在笼子里跑。OpenClaw 这类开源 Agent 框架会把浏览器控制、命令行执行、文件读写、第三方插件全部揉进一个进程里,在宿主机上裸奔时,它就像一只不按套路出牌的龙虾,满桌乱爬——今天帮你自动化处理任务,明天可能因为一个 Skill 的路径写错,把整个用户目录翻了个底朝天。
这篇东西不是翻译官方文档,而是把我自己踩过的坑、验证过的方案、以及最终跑稳定的一套 OpenClaw Docker 部署流程完整记录一遍。核心围绕三件事:怎么把 OpenClaw 塞进容器、怎么真正落实沙箱隔离而不是只在 YAML 里写个 image 完事、以及怎么在日常升级和排障时不翻车。适合刚接触 OpenClaw 的 Docker 新手,也适合已经裸机跑了一段时间、想迁到容器化环境的老手。
1. 先别急着跑安装脚本:裸机部署 OpenClaw 的真实痛点
很多人的 OpenClaw 起步方式和我一样,在 Windows 或 Mac 上照着教程执行一段安装脚本,回车,然后静静看它滚屏。这种方式对临时体验没问题,但一旦你想让它连续跑几天、挂上微信或 Telegram 插件、处理真实工作任务,裸机部署的问题会接二连三地冒出来。
1.1 依赖地狱:Node、Python、浏览器引擎挤成一锅粥
OpenClaw 的运行时依赖非常杂。主程序是 Node.js 写的,但不少 Skill 和插件又依赖 Python 环境;浏览器自动化要拉 Chromium;如果接本地模型,还得装 Python 的模型推理依赖。三套依赖体系直接摊在操作系统里,版本稍微错一点就是连锁反应。
我遇到过一个典型情况:系统里原本有 Python 3.10 供某个工具使用,结果 OpenClaw 的某个 Skill 强制要求 Python 3.11,一升级,原先的工具崩了。反过来也一样,为了兼容旧工具锁住 Python 版本,OpenClaw 又起不来。Node 版本也一样,OpenClaw 迭代很快,main 分支可能要求 Node 20 以上,而你系统里的 Node 还是 18,就只能手动切换版本管理器。
这些问题的本质是:OpenClaw 不是一个静态二进制文件,而是一个有大量运行时依赖的软件生态。它需要的是隔离环境,而不是和整个操作系统共享依赖。
1.2 Agent 程序天生需要“关起来养”
再往深一层说,普通应用可以容忍依赖稍微乱一点,但 Agent 类程序不行。OpenClaw 的强大之处在于它能够执行命令、读写文件、调用浏览器、安装 Skill。换句话说,它拥有较高的系统权限。你在裸机上运行它,相当于给一个会自动决策的程序发了张“全楼通行证”。
即使 OpenClaw 本身的代码没有恶意,Skill 生态里第三方贡献的内容你不可能逐行审计。容器化想解决的,不只是“依赖干净”,更重要的是运行时隔离:就算某个 Skill 出问题,或者模型被提示词注入带偏,它影响的范围也应该被限制在一个容器里,而不是直接碰到宿主机文件系统和网络。
1.3 Docker 方案要解决的核心问题
所以这篇文章要解决的三个核心问题就很明确了:
- 依赖隔离:把 Node、Python、Chromium 全部固化到镜像里,宿主机只需要一个 Docker 环境。
- 运行时边界:通过只读根文件系统、权限裁剪、资源限制,让 OpenClaw 只能在容器划定的范围内活动。
- 可重放与可升级:数据目录单独挂载,代码和依赖在镜像里,升级不会污染原数据。
Docker 不是解决 OpenClaw 所有问题的银弹,模型质量、插件稳定性这些它也管不了。但至少在“部署和运行环境”这个层面,容器化是当前最成熟、最不折腾的答案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 准备宿主机:Docker Desktop、WSL2 与“Virtualization support not detected”的真相
部署 OpenClaw 前,先得让 Docker 本身跑起来。这一步看似基础,很多人却卡在这。尤其是 Windows 用户,装完 Docker Desktop 启动就报错,日志里一行“Virtualization support not detected”直接把热情浇灭。
2.1 Windows 和 macOS 上的 Docker Desktop 安装
Windows 上装 Docker Desktop 前,先把两件事确认好:BIOS 里开启虚拟化(Intel VT-x 或 AMD-V),以及 Windows 功能里启用“虚拟机平台”和“适用于 Linux 的 Windows 子系统”。Docker Desktop 默认用的是 WSL2 后端,它需要一个完整的轻量虚拟机来承载 Linux 容器。如果你在 BIOS 里没开虚拟化,或者在 Windows 功能里关掉了虚拟机平台,启动必然失败。
macOS 上相对简单,Docker Desktop 直接基于 HyperKit 或 Apple Virtualization framework,只要 Intel 芯片的 Mac 开了硬件辅助虚拟化、Apple Silicon 的机器不要装成 x86 版本镜像就行。安装完成后,建议在 Docker Desktop 的设置里把资源调大一点,OpenClaw 跑浏览器自动化时,内存占用并不低,默认的 2GB 经常不够用。
2.2 Linux 服务器:Docker Engine + Compose 插件
如果你和我一样最终把 OpenClaw 放到 Linux 服务器上跑,不建议装 Docker Desktop,直接装 Docker Engine 即可。Debian/Ubuntu 上用官方源安装,CentOS/RHEL 用对应的 yum 源,装完后再补上 docker compose 插件。只要能用 docker compose version 输出,说明插件已经就位。
Linux 上还有一个细节:当前用户要加入 docker 组才能免 sudo 执行 docker 命令。但这里我建议,如果是生产环境,不要偷懒把用户直接加进 docker 组。docker 组权限约等于 root,加进去就失去了用户隔离意义。要么配置 sudo 后使用,要么专门建一个部署用户。
2.3 启动前先做一次环境自检
装好后,运行一条命令确认 Docker 功能完整:
bash复制docker run --rm hello-world
docker compose vers
