
如何为 Hermes Agent 保障容器镜像安全从基础镜像锁定到 CI 自动更新【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agentHermes Agent 是一个可以跑在容器里的 AI 代理工具。它发布的容器镜像超过 5GB基础镜像或依赖一变容器镜像安全的暴露面就跟着变。下面按容器生命周期走一遍仓库里的真实做法构建期锁定、推送/CI 期把关、运行期收敛、维护期自动更新。构建期 ️基础镜像用版本标签加摘要锁定问题写FROM debian:latest明天拉到的镜像就不再是你测试过的那份。实际做法Dockerfile 里运行基础镜像写死精确标签debian:13.4两个工具链源阶段还带摘要FROM node:26-bookworm-slimsha256:9e6f…bf73。动作把你 Dockerfile 里的每个基础镜像改成标签sha256两级锁定改标签前先过一遍兼容性测试。多阶段构建拆分镜像层问题编译器、源码和运行依赖挤在同一层镜像变大、攻击面变大。实际做法仓库把 sqlite_build、uv_source、node_source 拆成 3 个独立源阶段最终镜像只用COPY --from拷入成品二进制系统包用--no-install-recommends安装并顺手清掉 APT 缓存。动作构建后跑docker history image数一遍层数单层超过 1GB 就把依赖安装和源码复制拆成两层让缓存命中。Dockerfile 创建非 root 用户问题进程以 root 跑容器一旦被突破权限就太高。实际做法Dockerfile 用useradd -u 10000 -d /opt/data hermes建应用用户再用COPY --chmodarX,go-w . .把代码目录对应用户置为只读。动作你的镜像建好用户后用docker run --rm image id确认默认进程不是 uid 0。推送/CI 期 变更文件才触发镜像构建问题每个 PR 都跑 45 分钟双架构构建CI 队列会堵死。实际做法.github/workflows/docker.yml 的 detect 作业先对 PR 变更文件分类docker 泳道为 true 才构建build 作业不带任何密钥只对 :test 镜像跑 tests/docker 集成测试套件。动作把你的流水线拆成构建测试和发布两个作业发布作业只从受保护环境读取凭据。CI 里用 hadolint 静态检查 Dockerfile问题变量不加引号、RUN 静默失败这类问题要等运行时才暴露。实际做法.github/workflows/docker-lint.yml 的 hadolint 作业把 failure-threshold 设成 warning即出现任何告警就让构建失败shellcheck 以 error 级别检查脚本。动作给 PR 检查加一道 hadolint阈值不低于 warning。按摘要推送镜像再打标签问题先推标签后拼装同一标签在不同时刻可能指向不同内容。实际做法docker.yml 的 publish 作业按 digest 推送push-by-digestmerge 作业把两个架构的 digest 拼成 manifest list最后才挂 :main 和 :latest 标签每张镜像还用 HERMES_GIT_SHA 构建参数烙进构建提交号。动作发布流程里把 digest 和 git sha 一并记录拉取时对照 CI 产出核验。运行期每个服务单独降权到 hermes 用户问题init 体系若全部以 root 拉起服务整棵进程树权限过高。实际做法镜像用 s6-overlay 做进程监督每个受监督服务经s6-setuidgid hermes降权到 hermes 用户UID 可通过 HERMES_UID 在运行时覆盖。动作docker exec 容器 ps -o user,cmd确认没有任何业务进程以 root 运行。代码目录只读可写状态单独挂载问题运行时懒安装写进 venv会把代理自身搞坏。实际做法Dockerfile 设置HERMES_DISABLE_LAZY_INSTALLS1声明VOLUME [ /opt/data ]懒依赖被重定向到 /opt/data/lazy-packages应用只能新增模块、无法覆盖核心代码。动作你自己的镜像里把只读代码目录和可写数据目录分开VOLUME 声明只覆盖数据目录。维护期 Dependabot 自动更新 GitHub Actions问题按提交 SHA 锁定的 Actions 会慢慢落后于上游安全补丁。实际做法.github/dependabot.yml 注释写明了策略——只对 github-actions 生态开启自动更新每周一检查minor/patch 合并进一个 PR源码依赖精确锁定不接受自动提版本。动作给仓库的 actions 生态开 Dependabot每周频率PR 按普通评审流程过。OSV-Scanner 每周扫描锁定文件问题锁定版本爆出已知 CVE 后若没人盯着漏洞会一直敞着。实际做法.github/workflows/osv-scanner.yml 的调度是cron: 0 9 * * 1每周对 5 个锁定文件跑 OSV 数据库比对结果进 Security 标签页只做检测不阻塞合并也不碰锁定策略。动作给自己的锁定文件加一道每周扫描把锁定版本被爆出 CVE当作必须动版本号的硬触发。下一次 CI 跑完后做两件核验docker history image确认层数没有回退、VOLUME声明只覆盖 /opt/data再按 digest 拉取一次发布镜像与 merge 作业记录的摘要比对一致才算这张镜像可复现。【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考