OpenClaw + Docker + vLLM 配置时报错:EACCES permission denied, mkdir ‘/home/node/.openclaw/…’

现象(我遇到的报错)

在 OpenClaw 的配置界面选择:

  • Model/auth provider:vLLM
  • vLLM base URL:http://127.0.0.1:8001/v1
  • vLLM API key:vllm-local
  • vLLM model:Qwen/Qwen3-32B

确认后报错:

Error: EACCES: permission denied, mkdir '/home/node/.openclaw/agents/main/agent'

同时确认 vLLM 服务是正常的,例如:

curl http://127.0.0.1:8001/v1/models

能返回 Qwen/Qwen3-32B

结论:vLLM 没问题,OpenClaw 报错与模型无关,是容器挂载目录权限问题。


根因分析

OpenClaw 的 Docker 部署会把宿主机目录 bind mount 到容器内,例如:

volumes:
  - type: bind
    source: /home/chaobo/.openclaw
    target: /home/node/.openclaw
    bind:
      create_host_path: true

容器里运行 OpenClaw 的用户是 node(不是 root),通常是:

  • uid=1000(node)
  • gid=1000(node)

但宿主机目录 /home/chaobo/.openclaw 的属主/属组可能是:

  • uid=1005(chaobo)
  • gid=999(docker)
  • 权限 775

当 bind mount 进容器后,容器内看到的目录仍然是 uid=1005 gid=999 mode=775

此时容器用户是 1000:1000,既不是 owner,也不在 group(数值不匹配),所以只有 “other” 权限(r-x),没有写权限,于是 OpenClaw 想创建目录就会失败:

mkdir /home/node/.openclaw/agents/main/agent  ->  EACCES

一句话总结:

容器里运行用户的 UID/GID 与宿主机挂载目录的 UID/GID 不一致,导致容器内无写权限。


如何快速确认(定位方法)

1)确认 compose 的挂载路径

docker compose config | sed -n '/openclaw-gateway:/,/^[^ ]/p' | sed -n '/volumes:/,/^[^ ]/p'

确保 source 是你期望的路径,比如 /home/chaobo/.openclaw

2)在容器里看用户和挂载目录的 UID/GID

docker compose exec openclaw-gateway sh -lc '
id
stat -c "uid=%u gid=%g mode=%a path=%n" /home/node/.openclaw
touch /home/node/.openclaw/.wtest && echo OK || echo FAIL
'

如果 touch 失败并显示 Permission denied,基本就是权限问题。


解决方案(我最终有效)

把宿主机挂载目录的属主改成容器内 node 用户的 UID/GID(这里是 1000:1000),并确保可写:

sudo chown -R 1000:1000 /home/chaobo/.openclaw
sudo chmod -R u+rwX /home/chaobo/.openclaw

然后重启 OpenClaw:

docker compose up -d openclaw-gateway

再做一次写测试:

docker compose exec openclaw-gateway sh -lc 'touch /home/node/.openclaw/.wtest && echo OK'

看到 OK 后,回到 OpenClaw UI 继续配置 vLLM,就不会再报 EACCES 了。


为什么目录明明是 775 还会写不了?

关键点是:Linux 权限是按 数字 UID/GID 判定的,不看用户名字符串。

宿主机目录是:

  • owner: uid=1005
  • group: gid=999
  • mode: 775

容器内进程是:

  • uid=1000
  • gid=1000

它既不属于 owner,也不属于 group,于是只能用 other 权限(5),没有写权限。


额外经验:不要用 sudo 运行 docker-setup(避免绑到 /root)

一开始我遇到过 docker 不用 sudo 会 permission denied,于是用 sudo docker compose ... 运行。

sudo 会把 $HOME 变成 /root,导致 OpenClaw 的 bind mount 可能变成:

  • /root/.openclaw -> /home/node/.openclaw

这会引入更多权限和路径混乱问题。

更推荐先把用户加入 docker 组,之后用普通用户执行 docker 命令:

sudo usermod -aG docker chaobo
newgrp docker
docker ps

总结

  • vLLM 可用不代表 OpenClaw 配置就没问题;这里的报错本质是 容器挂载目录权限/UID 不一致
  • 最有效的修复是:让宿主机 .openclaw 目录属主与容器内运行用户一致(通常 1000:1000)。
  • 修复命令:
sudo chown -R 1000:1000 /home/chaobo/.openclaw
sudo chmod -R u+rwX /home/chaobo/.openclaw

之后 OpenClaw 就能正常创建 agents/main/agent 目录,配置流程可以继续。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐