背景条件:
1.使用docker容器安装Openclaw,正常启动。
2.启动后报权限问题,Error: EACCES: permission denied, mkdir '/d' ,主要在acpx、heartbeat出现。
解决3要点参考:配置文件2个、docker权限和用户权限不一致,主要解决的就是映射路径的正确性和映射下的docker权限一致问题。
关键配置1:用户根目录下的配置文件【~/.openclaw/openclaw.json】
"agents": {
"defaults": {
"workspace": "/home/node/.openclaw/workspace",##保持现状,此为openclaw内部映射
"sandbox": {
"mode": "off"
}
}
使用如下命令测试创建文件的权限:
$ docker compose exec openclaw-gateway sh -lc 'touch /home/node/.openclaw/workspace/1'
验证docker创建文件的权限:
- 如果找不到文件地址,说明文件映射有问题,解决文件映射。(向下看关键配置2)
- 如果touch权限有问题,改docker容器权限
cpp
sudo chown -R 1000:1000 /d/projects/openclaw-docker/openclaw/*
sudo chmod -R u+rwX /d/projects/openclaw-docker/openclaw/*
参考原因**:**https://blog.csdn.net/weixin_42098685/article/details/158420526
关键配置2【docker-compose.yml】
openclaw在docker下的文件安装目录如:/e/project/openclaw-docker/openclaw下,看vloumes里的两个文件目录变量配置
bash
services:
openclaw-gateway:
image: ${OPENCLAW_IMAGE:-openclaw:local}
environment:
HOME: /home/node
TERM: xterm-256color
OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN:-}
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS: ${OPENCLAW_ALLOW_INSECURE_PRIVATE_WS:-}
CLAUDE_AI_SESSION_KEY: ${CLAUDE_AI_SESSION_KEY:-}
CLAUDE_WEB_SESSION_KEY: ${CLAUDE_WEB_SESSION_KEY:-}
CLAUDE_WEB_COOKIE: ${CLAUDE_WEB_COOKIE:-}
TZ: ${OPENCLAW_TZ:-UTC}
volumes:
- /c/user/userxxxxxxxx/.openclaw/openclaw.json:/home/node/.openclaw #配置文件映射,即上方个人根目录下config,如果环境变量没配置,使用直接目录映射(配置文件目录可改)
- /d/projects/openclaw-docker/openclaw/workspace:/home/node/.openclaw/workspace #文件目录映射,如果环境变量没配置,使用直接目录映射
## Uncomment the lines below to enable sandbox isolation
## (agents.defaults.sandbox). Requires Docker CLI in the image
## (build with --build-arg OPENCLAW_INSTALL_DOCKER_CLI=1) or use
## scripts/docker/setup.sh with OPENCLAW_SANDBOX=1 for automated setup.
## Set DOCKER_GID to the host's docker group GID (run: stat -c '%g' /var/run/docker.sock).
# - /var/run/docker.sock:/var/run/docker.sock
最终解决总结:把目录改正确,把权限设置一致,docker权限一致,配置文件目录都能找到且正确,问题就解决了。记得重启容器。