Docker部署OpenClaw:compose编排、数据持久化与避坑实践 简介这套代码包面向需要快速上手OpenClaw的开发者聚焦用Docker完成部署与配置覆盖从基础镜像手动安装、配置网关到通过Dockerfile构建自定义镜像的完整技术路径。整套资源为ZIP格式共8个文件以Shell安装脚本、Dockerfile、docker-compose、JSON配置和Markdown说明为主压缩包大小约12KB体量轻巧、便于直接复用和改造。已有1369人学习下载。包内既有可运行的安装与编排脚本也有项目说明、默认配置和辅助页面资源对插件冲突、网络配置等高频问题做了专门提醒并给出了通过修改默认配置与模板化设置优化镜像的思路与建议能减少测试、开发与部署阶段的踩坑概率。借助Docker的容器隔离和分层镜像能力这套内容还适合用来管理OpenClaw版本、快速迭代或回退适合需要提升部署可控性和环境一致性的AI应用开发者。1. Docker 安装 OpenClaw别急着敲 docker run先想清楚三件事看到“Docker安装OpenClaw指南[代码]”这个标题多数人的第一反应是找一条 docker run 命令直接粘贴。但如果你真这么干大概率会在半小时后陷入“容器起来了、管理页打不开、配置存不住”的三连翻车。OpenClaw 这种带管理界面、会写配置、还要长期跑会话任务的框架容器化部署真正的难点从来不是“装起来”而是“装完能长期不返工”。这篇笔记按我实际部署时的路径来写先讲清楚为什么用 Docker 装、再给一份能直接落地的 compose 文件、然后把内存、日志、数据卷这些必调参数逐个说明白最后是五条踩坑记录。适合正在搭 OpenClaw 环境、又不想在裸机上被依赖问题折磨的开发者也适合已经跑起来但被重启还原、端口冲突折腾过的熟手。2. 为什么用 Docker 装 OpenClaw容器化方案的两个先决条件2.1 从裸机到容器OpenClaw 运行环境里哪些依赖最容易被拖垮OpenClaw 部署到裸机时最常见的场景是“在某台机器上能跑换一台就废了”。它的运行环境里至少有三类东西容易被系统环境拖垮一是运行时的语言版本和第三方库某些底层库对系统自带的版本敏感升级系统包时很容易把兼容性弄碎二是配置文件里写的绝对路径裸机部署时经常出现“日志写到一半找不到目录”的怪问题三是会话进程的退出残留OpenClaw 这类工具会维护长期会话状态进程被异常杀掉后留下的锁文件在裸机上很难彻底清理。用 Docker 装 OpenClaw本质上是把这三类不确定性全部封装进镜像层。镜像里已经包含了它运行所需要的语言运行时、依赖库和默认目录结构宿主机上装了什么、升级了什么和容器内的环境不再互相干扰。我一般会在服务器上准备一个独立的目录专门放 OpenClaw 的数据卷这样即使镜像更新、容器重建配置和会话记录也还在。容器化方案的另一个隐含价值是可复现性。同一份 compose 文件在 A 机器上能跑在 B 机器上大概率也能跑差别只在于数据卷目录的权限和端口是否被占用。这一点对于要部署多套实例、或者帮同事搭建同样环境的场景特别重要。你不需要写一份“先装依赖再改配置”的长篇文档一条 docker compose up -d 就够了。2.2 部署前清单目录规划、网络模式与镜像来源校验在动手拉镜像之前我建议先花五分钟确认三件事这五分钟能省掉后面两个小时的排障。第一是目录规划。你要决定 OpenClaw 的配置、会话、日志分别放在宿主机的哪个路径下并把它们映射进容器。常见做法是在家目录下建一个统一目录比如 ~/openclaw/data里面再分 config、sessions、logs 三个子目录。这样后续备份只需要打包这一个顶层目录迁移时也只要拷贝它。目录权限要注意容器内的进程通常以非 root 用户运行宿主机目录的所有者如果和容器内用户 UID 不一致会出现“容器内能写、宿主机看得到文件但重启后写不进去”的权限问题。第二是网络模式。OpenClaw 默认会监听一个管理端口如果这个端口和宿主机上已有的服务冲突容器能启动但页面打不开。我的习惯是先执行 ss -tlnp 看一眼端口占用情况再决定映射到宿主机的哪个端口。另外如果 OpenClaw 需要访问宿主机上的其他服务比如本机数据库或消息队列用 host 网络模式最省事但代价是端口隔离失效用 bridge 模式则需要把目标服务的 IP 写成宿主机在 docker0 网桥上的地址。第三是镜像来源校验。拉镜像时不要只盯着 latest 标签latest 是滚动更新的今天拉的和上个月拉的可能不是同一个版本。我在生产环境里一定会用具体的版本标签。首次拉取后建议马上执行 docker image inspect 看一眼镜像的创建时间和环境变量确认镜像的默认工作目录和暴露端口和你准备挂载的路径对得上。提示部署前先把这三项写进一个简单的部署备忘别信自己的记忆力。我吃过亏——以为端口没冲突结果容器一直处于重启循环排查半天才发现是端口被系统服务占了。3. 用 docker-compose 拉起最小可用 OpenClaw一份能直接落地的编排文件3.1 最小化 compose 文件镜像、端口、数据卷三件套用 docker run 单条命令也能把 OpenClaw 跑起来但我不推荐因为命令里的参数一旦写错改起来要重敲一整条。用 docker-compose 管理的好处是编排文件本身就是文档端口、挂载、环境变量都写在明面上换机器时拷贝一份文件就能复现。我一般会在 ~/openclaw/ 下放一个 docker-compose.yml内容如下这是能跑通的最小配置services: openclaw: image: openclaw/openclaw:stable container_name: openclaw restart: unless-stopped ports: - 8080:8080 volumes: - ./data/config:/app/config - ./data/sessions:/app/sessions - ./data/logs:/app/logs environment: TZ: Asia/Shanghai OPENCLAW_PORT: 8080这段配置的逻辑很直接指定镜像为 openclaw/openclaw:stable容器内部的管理端口是 8080映射到宿主机的 8080 端口挂载三个数据目录把配置、会话、日志都落到宿主机上环境变量里设置了时区和监听端口。参数说明要分几个点讲。restart: unless-stopped 的意思是容器异常退出时自动拉起但如果你手动 stop 它就不会被自动重启——这个策略适合长期运行的 OpenClaw 服务。ports 的写法 8080:8080 是“宿主机端口:容器端口”如果你宿主机上 8080 已被占用改成 8081:8080 即可注意改完要访问 8081 而不是 8080。volumes 里用的是相对路径基于 compose 文件所在目录所以你在 ~/openclaw/ 下执行命令时数据会落在 ~/openclaw/data/ 下迁移整机时打包这个目录就行。执行启动命令前先创建好数据目录并给到合适的权限。我一般这样做mkdir -p ~/openclaw/data/{config,sessions,logs} cd ~/openclaw docker compose up -d这里的 mkdir -p 会一次性建好三个子目录docker compose up -d 是后台启动。如果你用的是旧版 docker-compose命令要写成 docker-compose up -d注意中间有没有横杠。启动后别急着关终端先看一眼容器状态确认不是奇怪的退出状态。3.2 启动后的自检动作容器日志、健康状态与首次配置入口容器启动后有三件事要做查状态、看日志、确认管理页能打开。这三步走完最小可用环境才算真正落地。docker compose ps docker logs openclaw --tail 100 curl -I http://127.0.0.1:8080docker compose ps 会显示容器的运行状态和端口映射正常情况是 Up 状态。docker logs 里如果出现类似“listening on 0.0.0.0:8080”的日志说明服务进程已经起来了。curl -I 用 HEAD 请求探测管理页返回 HTTP 状态码说明端口通如果 curl 没装可以换成 wget --spider http://127.0.0.1:8080。这里有个常见误区容器状态是 Up不代表服务就绪。很多框架在启动时要做数据库初始化或配置加载这期间端口还没有监听要等几秒到几十秒。我看到过有人容器刚起来就去点页面发现打不开就开始重启容器结果陷入死循环。正确的做法是看日志里有没有明确的启动完成标志再配合 curl 探测。首次打开管理页时OpenClaw 一般会引导你创建管理员账号或初始化配置。这个配置一旦写入就会落到我们挂载的 ./data/config 目录下。这一步完成后建议回到宿主机看一眼目录里是不是多了配置文件确认数据卷挂载确实生效。如果目录是空的说明挂载路径没对上这是个必须尽早解决的隐患否则后面重启必丢配置。4. 参数调优与数据持久化让 OpenClaw 在容器里长期稳定跑4.1 必调参数内存上限、日志轮转与重启策略最小配置能跑通但不建议直接丢到生产环境里长跑。OpenClaw 的会话任务会吃内存日志文件会无限增长这些都要在 compose 文件里提前约束住。我调优后的 compose 文件长这样services: openclaw: image: openclaw/openclaw:stable container_name: openclaw restart: unless-stopped ports: - 8080:8080 volumes: - ./data/config:/app/config - ./data/sessions:/app/sessions - ./data/logs:/app/logs environment: TZ: Asia/Shanghai OPENCLAW_PORT: 8080 logging: driver: json-file options: max-size: 10m max-file: 3 deploy: resources: limits: memory: 2g对比最小配置这里加了两个关键块。logging 块限制容器日志的单文件大小为 10MB最多保留 3 个文件防止日志把磁盘写满。deploy.resources.limits.memory 把容器内存上限设为 2GB超过这个值容器会被内核 OOM 杀掉并自动重启配合 restart: unless-stopped。内存上限要结合你的会话并发量来定OpenClaw 跑复杂任务时内存涨幅很快设太小会导致频繁重启我一般先观察两天的峰值内存再定这个值。查看容器内存使用情况的命令docker stats openclawdocker stats 实时显示 CPU 和内存占用。观察几个小时取一个峰值上浮 30% 作为内存上限这样既不会浪费资源也不会动不动被 OOM。另外补充一个冷门但有用的参数重启策略。restart: unless-stopped 适合大多数场景但如果你希望宿主机重启后 OpenClaw 也自动拉起可以保持这个策略不变——它就是干这个的。千万不要用 always因为 always 在容器手动停止后仍会在下次 Docker 服务启动时自动拉起你可能想停都停不住。4.2 数据持久化与备份习惯把配置和会话目录挂出容器数据卷挂载上面已经写了但这里要单独说清楚一件事不挂载数据卷的后果是什么。如果镜像里自带了默认数据目录而你启动容器时没挂载那么容器一旦被删除所有配置和会话数据连同容器一起消失。很多人以为 restart 就万事大吉但 restart 只保证容器进程重启不保证容器本身不被删。一旦你执行 docker compose down 再 up未挂载的数据就全没了。挂载做到了、备份也要跟上。我的备份习惯是在宿主机上写一个定时任务每天打包一次数据目录tar -czf openclaw-backup-$(date %F).tar.gz -C ~/openclaw data这条命令把 ~/openclaw/data 目录压缩成带日期的归档文件。恢复时先停容器解压归档到原目录再启动容器docker compose down tar -xzf openclaw-backup-2025-01-01.tar.gz -C ~/openclaw docker compose up -d备份的频率取决于你对数据丢失的容忍度。会话记录如果只是调试用的临时数据一周一次够了如果里面存着生产环境的任务配置建议每天备份并保留最近七天。数据卷权限问题也常在这里暴露如果容器内进程以 UID 1000 运行而你宿主机备份目录的所有者是 root恢复数据后容器会写不进去。解决方法是恢复后执行 chown -R 1000:1000 ~/openclaw/data把目录属主改成容器内用户对应的 UID。提示换机器迁移时别只拷数据卷要连 compose 文件一起拷。数据卷记录的是运行状态compose 文件记录的是运行方式两者缺一个都得重新折腾。5. OpenClaw 容器化避坑清单5 个典型故障与处理顺序5.1 现象一容器起来了但 Web 管理页打不开现象docker compose ps 显示容器是 Up但浏览器访问管理页一直超时。原因有两类最常见的是端口映射没生效其次是容器内的服务还没监听端口。处理顺序先看宿主机端口是否有监听再进容器看进程状态。排查命令我一般这样执行ss -tlnp | grep 8080 docker exec -it openclaw sh -c wget -qO- http://127.0.0.1:8080 || echo not-ready第一条命令确认宿主机上 8080 端口是否有进程监听第二条命令绕过端口映射直接在容器内部访问服务用来判断是服务没起来还是网络映射问题。如果容器内 curl 通、宿主机不通那就是端口映射或防火墙的问题检查 compose 文件里的 ports 段如果容器内也不通说明服务还在初始化等日志出现 ready 字样再试。5.2 现象二重启后配置全部还原现象第一天配置好的管理账号和参数docker compose restart 之后全部回到初始状态。原因基本只有一个配置目录没有挂载或挂载路径不对。常见错误是把宿主机路径写成了容器内路径比如 volumes 里写了 /app/config:/app/config这会把容器目录挂到自己身上等于没挂。处理方式先看容器启动时日志里有没有提示配置写入的路径再对比镜像里默认的配置目录。在 compose 文件里把宿主机路径改成带 ./data 前缀的路径然后 down 再 up 重新创建容器。注意是 down 加 uprestart 不会重新挂载。我给这个坑排了个优先级的理由是数据丢失类问题比端口类问题隐蔽得多而且一旦你继续跑了好几天才发现回滚都没有余地。5.3 现象三容器反复退出日志只留一句 exit code现象容器启动后几秒就退出docker logs 里只有一句 exit code 1。原因大概率是环境变量或启动命令不对。OpenClaw 镜像在启动时会校验关键环境变量缺了就拿不到监听端口。处理方法是先看完整日志不要只看最后几行再进容器手动执行启动命令看报错docker logs openclaw 21 | head -50 docker run --rm -it --entrypoint sh openclaw/openclaw:stable第二条命令用临时容器覆盖默认启动命令进入 shell 后手动执行启动脚本这样能看到真正的报错信息而不是被 up 状态欺骗。我遇到过一次是时区环境变量格式写错导致启动脚本解析失败改回标准 TZ 值就好了。5.4 现象四与宿主机其他服务端口冲突现象容器能启动但外部始终无法连接ss 查看发现宿主机端口被另一个进程占用。处理方式最简单换宿主机映射端口。但要强调的是只改 ports 的左边数字右边容器端口保持不变。比如:ports: - 8081:8080这样宿主机的 8081 接受请求转发到容器内的 8080。改完执行 docker compose up -d 重新创建容器不要用 restart因为端口映射在容器创建时只读取一次。5.5 现象五容器内时区不对导致定时任务延迟 8 小时现象OpenClaw 里配置的定时任务总是比预期时间晚 8 小时触发。原因是容器默认时区是 UTC而你的预期是北京时间。解决在 compose 文件的 environment 里设置 TZ: Asia/Shanghai然后重建容器。如果镜像里没有 tzdata只设 TZ 可能无效需要在构建镜像时安装 tzdata或者用宿主机的时区文件挂载进去volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro这个坑提醒我们容器里的环境和宿主机不是同一个世界凡是和时间相关的行为都要先确认时区设置。6. 进阶版本升级与跨机器迁移用镜像 tag 和数据卷快照兜底OpenClaw 镜像更新比较频繁长期跑的人迟早要面对升级问题。我的升级流程是先进容器备份数据卷再拉新镜像然后重建容器最后验证版本。备份时先停容器确保数据卷没有写入中的文件再打包docker compose stop tar -czf pre-upgrade-backup.tar.gz -C ~/openclaw data docker compose pull docker compose up -ddocker compose pull 会把 compose 文件里指定的镜像拉成最新层。需要注意如果你用的是 stable 标签pull 会把镜像更新到的当前稳定版版本跨度可能很大更稳妥的做法是先手动执行 docker pull openclaw/openclaw:具体的版本标签确认无误后把 compose 文件里 image 字段改成这个标签再执行 up -d。降级操作同理把标签改回旧版本重新 up -d数据卷不动配置一般能兼容但建议降级前也做一次备份因为高版本写入的配置可能被低版本拒绝读取。跨机器迁移时我一般把 compose 文件和数据卷归档一起拷过去。目标机器上先建目录、解压数据、改好端口再启动。这里最容易漏的是数据目录的属主不对新机器上解压后所有文件是 root 属主容器内进程写不进去启动会报权限错误。执行 chown 后再启动容器。关于验证我每次升级后固定跑一遍回归动作打开管理页确认能登录创建一个测试会话跑通一个简单任务看一眼日志没有红色报错。这套动作用不了五分钟但能避免升级完才发现老任务全部挂掉的尴尬。之前有一次我升级后偷懒没跑回归结果会话任务全被新版本迁移逻辑重置一群定时任务静默失败排查花了一个下午。从那以后我再也没有跳过验证环节。OpenClaw 的容器化部署说穿了就三件事目录规划要提前、参数调优要观察、数据卷要当宝。如果你照着这份指南一步步来从拉镜像到跑通管理页应该在十分钟内完成后面需要操心的是内存上限和备份频率。踩坑是正常的但希望这篇笔记能帮你把坑都留在可见处而不是半夜三点被日志刷屏惊醒。希望帮到你。本文还有配套的精品资源点击获取