news 2026/9/14 4:05:15

Hermes WebUI Docker 启动报 “.env permission denied“ 怎么配置权限修复开关

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hermes WebUI Docker 启动报 “.env permission denied“ 怎么配置权限修复开关

Hermes WebUI Docker 启动报 ".env permission denied" 怎么配置权限修复开关

【免费下载链接】hermes-webuiHermes WebUI: The best way to use Hermes Agent from the web or from your phone!项目地址: https://gitcode.com/GitHub_Trending/he/hermes-webui

用 Docker 部署 Hermes WebUI 时,如果你的.env文件带有 group 权限位(比如 0640),容器启动后会先打印一行权限修正日志,紧接着报.env读取失败、无法启动。本文对应 docs/docker.md "What goes wrong" 一节中记录的 #1389 问题,说明如何通过HERMES_SKIP_CHMODHERMES_HOME_MODE两个权限修复开关关闭或放宽启动时的强制 chmod 行为,让容器正常启动。

先确认是这个问题的现象

docs/docker.md 给出的判定条件是:宿主机上.env文件被设置成 0640 这类 group 可读模式(例如 bind-mount 一个已存在的~/.hermes.env故意保持 group 可读),容器启动后日志出现:

[security] fixed permissions on .env (0o640 -> 0600) failed to load .env: open .env: permission denied

如果日志是其他路径的PermissionError(如/home/hermeswebui/.hermes/...读不到),那是 bind mount 的 UID/GID 不匹配问题,对应同一文档中的第 1 条,需要设置UID/GID,不是本文的开关能解决的。

原因:启动钩子默认强制 0600

WebUI 每次进程启动都会执行 api/startup.py 中的fix_credential_permissions()。它扫描HERMES_HOME下的敏感文件——.envgoogle_token.jsongoogle_client_secret.json.signing_keyauth.json——对带 group/other 位的文件强制改回0600,并打印上面那行[security] fixed permissions ...日志。文档指出,这对干净安装是正确行为,但会覆盖运维者刻意设置的 group 位,导致.env加载失败。

在 .env 里配置权限修复开关

修复方式是设置下面两个环境变量之一,写进你的.env文件(也就是 compose 读取的环境文件):

  • HERMES_SKIP_CHMOD=1— 完全绕过这个修正钩子
  • HERMES_HOME_MODE=0640— 允许 group 位,只剥掉 world 可读位
HERMES_SKIP_CHMOD=1

或者

HERMES_HOME_MODE=0640

.env.docker.example的 "Permission handling for bind-mounted .hermes" 一节对这两个开关有同样的说明,三个 compose 文件(docker-compose.yml、docker-compose.two-container.yml、docker-compose.three-container.yml)的 WebUI service 块里也留了对应的注释行,可以按需取消注释。

改完后重启容器。单容器(docker-compose.yml)按 docs/docker.md 给出的命令:

docker compose down && docker compose up -d

两容器或三容器布局带上-f指定 compose 文件:

docker compose -f docker-compose.two-container.yml down docker compose -f docker-compose.two-container.yml up -d

三容器把文件名换成docker-compose.three-container.yml

多容器布局下 HERMES_HOME_MODE 的语义差异

如果你在跑docker-compose.two-container.yml/docker-compose.three-container.yml,注意HERMES_HOME_MODE在 WebUI 和 agent 镜像里含义不同:

  • WebUI:credential 文件(.env.signing_key等)的 mode 阈值,0640表示允许 group 位
  • AgentHERMES_HOME目录的 mode,默认0700

0640用在目录上没有 owner 执行位,agent 无法进入自己的 home 目录,容器直接起不来。多容器场景如果要给 agent 侧设置,应使用HERMES_HOME_MODE=0750(group 可穿越)或0701(x-only)。两个 compose 文件的 agent 与 WebUI service 块内的注释分别标注了各自的正确取值,不要互相照抄数值。

另外,agent 容器自身检测到/.dockerenv后会自动跳过 credential chmod,所以 agent 侧的HERMES_SKIP_CHMOD是多余的,不用配置。

验证结果

按 docs/docker.md 末尾给出的诊断方式,查看容器日志:

docker logs hermes-webui

确认不再出现[security] fixed permissions on .envfailed to load .env: open .env: permission denied两行,然后按快速启动一节的步骤打开http://localhost:8787,页面能加载即说明.env已被正常读取。

相关背景

  • #1389:HERMES_HOME_MODE覆盖行为,v0.50.254 起 agent 侧也遵循HERMES_SKIP_CHMODHERMES_HOME_MODE(见 docs/docker.md 的 Related issues 一节)
  • 实现细节见 api/startup.py 的fix_credential_permissions()HERMES_SKIP_CHMOD1true时直接返回;设置了HERMES_HOME_MODE时只清除 other 位(0o007),否则整体改到0o600
  • 如果你是在 bind-mount 迁移既有~/.hermes,同一文档的 "Bind-mount migration" 一节的第 4 条要求同样设置HERMES_SKIP_CHMOD=1HERMES_HOME_MODE=0640,避免启动钩子再去强制 0600

【免费下载链接】hermes-webuiHermes WebUI: The best way to use Hermes Agent from the web or from your phone!项目地址: https://gitcode.com/GitHub_Trending/he/hermes-webui

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 4:03:35

Python数字图像处理课设工程:OpenCV+PyQt5可调试系统

简介:这是一份面向计算机、人工智能、电子信息等专业本科生的数字图像处理课程设计实践源码,聚焦灰度变换、空域频域滤波、边缘检测、图像锐化及人脸识别等核心实验任务,兼顾教学演示与毕设开发需求。资源共38个文件,含17个Python…

作者头像 李华
网站建设 2026/9/14 4:03:22

腾讯健康医疗AI Agent:微信生态重构就医全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 4:02:11

Rufus 完整教程:用 unattend.xml 定制你的 Windows 11 安装盘

Rufus 完整教程:用 unattend.xml 定制你的 Windows 11 安装盘 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus 装 Windows 11 到 OOBE(开箱体验,也就是首次开机…

作者头像 李华
网站建设 2026/9/14 4:01:28

WinForms现代化改造:MWGA框架迁移实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华