教程 · 部署
用 Docker 部署 OpenClaw 龙虾:一条命令起跑
本机装龙虾要先备齐 Python、Node、Git,还得建虚拟环境,稍不留神就跟别的项目版本打架。Docker 把这些麻烦全装进一个盒子里——拉一个镜像,写几行配置,起一条命令,龙虾就跑起来了,而且不碰你本机的环境。这篇按拉镜像、compose、挂载、环境变量的顺序走,最后给 5 个常见坑。
先确认 Docker 装好了
不管什么系统,先在终端查一下 Docker 在不在:
docker --version
docker compose version
两条都有输出就行。没装的话:macOS 和 Windows 装 Docker Desktop(图形界面,开箱即用);Linux 装 docker 引擎加 compose 插件。Windows 上 Docker Desktop 会要求开 WSL2,按它的提示走即可。
路线一:直接拉现成镜像
如果项目方发布了官方镜像,这是最快的路。拉下来直接跑:
# 拉镜像(镜像名以项目实际发布的为准)
docker pull <openclaw-image>:latest
# 起一个容器,把配置和数据挂到本机
docker run -d --name openclaw \
-p 8080:8080 \
-v $(pwd)/data:/app/data \
--env-file ./.env \
<openclaw-image>:latest
几个参数解释一下:-d 是后台跑;-p 8080:8080 把容器里的端口映射到本机,浏览器才能访问;-v 是挂载,把本机的 data 目录接到容器内,数据才不会丢;--env-file 把环境变量喂进去。
路线二:用 docker compose(推荐)
命令一长就难记、难改。把配置写进一个 docker-compose.yml 文件,以后改配置改文件就行,起停只用一条命令。在项目目录建这个文件:
services:
openclaw:
image: <openclaw-image>:latest
container_name: openclaw
restart: unless-stopped
ports:
- "8080:8080"
env_file:
- .env
volumes:
- ./data:/app/data
- ./config:/app/config
写好后,在同目录下:
# 起服务(-d 后台)
docker compose up -d
# 看日志,确认起来了
docker compose logs -f
# 停服务
docker compose down
restart: unless-stopped 这一行很实用——机器重启后容器会自动拉起来,不用你手动开。
环境变量:把“大脑”接上
龙虾本体没智商,得在 .env 里告诉它用哪个模型。在项目目录建一个 .env:
# 走云端 API
MODEL_PROVIDER=anthropic
MODEL_NAME=claude-...
API_KEY=sk-你的密钥
# 或者接本地模型(地址用 host.docker.internal 指向本机)
# MODEL_PROVIDER=local
# API_BASE=http://host.docker.internal:11434
注意一个容器里的坑:容器内的 localhost 指的是容器自己,不是你本机。要让容器访问本机上跑的本地模型服务,地址得写 host.docker.internal,不能写 localhost。这是新手最常栽的地方。
挂载:哪些目录一定要挂出来
容器是“用完即弃”的,删了重建里面写的东西就没了。所以这几样必须用 -v 挂到本机:
- 配置目录:
.env和其它配置文件,改了不用重建镜像。 - 数据目录:龙虾跑任务产生的文件、日志、缓存。
- 工作目录:你想让龙虾操作的那些文件所在目录——挂进去它才读得到。
没挂的目录里写的东西,跟容器一起灰飞烟灭。
localhost:11434 去接宿主机上的本地服务,容器是连不上的——容器里的 localhost 指的是容器自己。要接宿主机服务,得改成 host.docker.internal。这一条几乎人人会撞一次,记下来能省半小时排查。
常见坑 5 条
1. 端口已被占用(port is already allocated)
原因:本机 8080 被别的程序占了。解决:换个映射,比如 -p 8090:8080,左边是本机端口、右边是容器内端口,改左边就行。
2. 容器内连不上本机的本地模型
原因:地址写成了 localhost。解决:改成 host.docker.internal。Linux 上若该域名不通,可在 compose 里加 extra_hosts: ["host.docker.internal:host-gateway"]。
3. 改了 .env 不生效
原因:环境变量是容器启动时读的,光改文件不重启没用。解决:docker compose up -d 再跑一遍,它会用新配置重建容器。
4. 数据一重建就没了
原因:忘了挂载,数据写在容器内部。解决:在 compose 的 volumes 里把数据目录挂到本机,重新 up 一次。
5. 拉镜像超时
原因:默认镜像仓库在境外,慢。解决:给 Docker 配一个国内镜像加速地址,再 docker pull。
常见问题
- 用 Docker 跑龙虾和直接装有什么区别?
- 最大区别是干净。Docker 把依赖全封在容器里,不碰本机环境,删容器就等于卸干净。代价是镜像占几个 G、首次拉镜像慢。机器上已有别的项目、怕版本打架时用 Docker 最省心。
- 容器一关,配置和数据会丢吗?
- 看有没有挂载。用 volumes 把配置和数据目录挂到本机,删了重建也不丢;没挂的话容器内写的东西会跟着没。所以 .env 和数据目录一定要挂出来。
- 容器里能调用本机的浏览器或文件吗?
- 文件可以,把本机目录挂进容器即可。本机图形浏览器默认进不去容器,浏览器自动化用容器自带的无头浏览器。要操作本机桌面软件的场景,建议直接本地装。