Docker 部署 OpenClaw 注意事项

Docker部署小龙虾时踩了不少坑,留下笔记警示后人。

教程参考这篇知乎专栏,写的很详细,可以少走不少弯路,不过仍然有些需要注意的地方。

权限问题

root用户部署

如果你是用root用户跑的 ./docker-setup.sh,那么 openclaw 的配置文件存放在 /root/.openclaw,且可能会出现以下报错:

1
Error: EACCES: permission denied, open '/home/node/.openclaw/openclaw.json.7.2ede223b-aa90-4aa5-8f0d-97049696b626.tmp

这是因为 /root/.openclaw 的所有者是 root,openclaw 没有权限访问这个文件夹。

解决方法是执行 chown -R 1000:1000 "$HOME/.openclaw",把 .openclaw 文件夹及其内部所有东西的所有权,交给 ID 为 1000 的用户和组。

然后重新执行一遍 ./docker-setup.sh 就解决了。

普通用户部署

假设用户为 McGuffin,那么 openclaw 的配置文件存放在 /home/McGuffin/.openclaw,且可能会出现以下报错:

1
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.51/networks?filters=%7B%22name%22%3A%7B%22openclaw-in-docker_default%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied

说明当前的 SSH 用户没有权限访问 Docker 的守护进程。在 Linux 系统中,默认只有 root 用户或 docker 组的用户才能操作 Docker。

只需要把当前用户加入 docker 组就可以了。

1
2
3
sudo groupadd docker # 创建 docker 用户组(如果不存在)
sudo usermod -aG docker $USER # 将当前用户加入 docker 组
newgrp docker # 刷新权限

openclaw: command not found

很多教程都会使用 openclaw 命令,但是由于我们是使用 docker 部署的,不能直接使用此命令,而是应该使用 docker compose run --rm openclaw-cli

例如:

1
2
3
4
5
# 原命令
openclaw onboard

# 变更后的命令
docker compose run --rm openclaw-cli onboard

不需要 docker exec 进入容器,直接在宿主机源码目录执行即可。