Appearance
OpenClaw Docker 部署:容器卷权限错误与 Telegram polling/webhook 模式冲突
问题
使用 Docker Compose 部署 OpenClaw 时,常见两类配置问题:
问题 1:Agent 写文件时遇到权限错误
OpenClaw 的 exec/文件工具运行在 Docker 容器内,映射的宿主机目录(volume)所有者与运行 Docker daemon 的用户不一致,导致:
Error: EACCES: permission denied, open '/workspace/output.txt'问题 2:Telegram Bot 不响应消息(polling 与 webhook 冲突)
OpenClaw 默认使用 polling 模式从 Telegram 拉取消息,但如果配置文件中误开启了 webhook 选项,两种模式同时存在会导致消息无法正常投递,Bot 完全不响应。
解决方案
修复容器卷权限问题
确保 volume 映射目录的所有者与运行 Docker daemon 的用户一致:
bash
# 查看当前用户
whoami
id
# 修改宿主机目录所有权(替换为实际路径和用户名)
sudo chown -R $(whoami):$(whoami) /path/to/your/workspace
# 或者在 docker-compose.yml 中通过 user 字段指定在 docker-compose.yml 中明确声明运行用户:
yaml
services:
openclaw:
image: openclaw/openclaw:latest
user: "1000:1000" # 替换为 id 命令输出的 uid:gid
volumes:
- ./workspace:/workspace验证修复:
bash
docker exec -it openclaw-gateway id
# 应显示与宿主机一致的 uid/gid修复 Telegram polling/webhook 冲突
检查 OpenClaw 配置文件,确保只启用一种模式:
bash
# 查看 Telegram 相关配置
openclaw config get channels.telegram正确的 polling 配置(默认,推荐):
yaml
channels:
telegram:
botToken: "YOUR_BOT_TOKEN"
# 不设置 webhookUrl,即使用 polling如果之前设置过 webhook,需要清除:
bash
# 方法一:通过 OpenClaw 配置删除
openclaw config unset channels.telegram.webhookUrl
# 方法二:直接通过 Telegram API 删除 webhook
curl "https://api.telegram.org/bot<YOUR_TOKEN>/deleteWebhook"
# 重启 gateway
openclaw gateway restart验证 Bot 恢复响应:
bash
openclaw logs --follow | grep -i telegram
# 应看到 "polling started" 而非 webhook 相关日志常见问题
Q: Docker 部署时 agent 创建的文件消失了,是正常的吗?
A: 是的。容器内创建的文件默认在容器生命周期内有效,重启后丢失。需要将工作目录通过 volume 挂载到宿主机,才能持久化输出文件。
Q: 如何确认 Telegram 当前用的是 polling 还是 webhook 模式?
A: 运行 curl "https://api.telegram.org/bot<TOKEN>/getWebhookInfo",返回 url 字段为空字符串表示使用 polling;有 URL 值则表示设置了 webhook。