Google Cloud Run挂载Secret读取报EISDIR错误的解决求助
解决Cloud Run挂载Secret读取报错EISDIR的思路
错误核心原因
EISDIR: illegal operation on a directory, read 报错的本质是:你尝试读取的目标是目录,而非存储Secret内容的实际文件。Cloud Run挂载Secret到目录路径时,不会直接将内容写入该目录,而是会在这个目录下生成一个与Secret同名的文件来存放内容。
具体解决步骤
直接挂载到文件路径
在Cloud Run服务设置里,不要把Secret挂载到/run/secrets/mySecret(目录),而是指定具体文件路径,比如/run/secrets/mySecret.txt。挂载完成后,这个路径就是存储Secret内容的文件,直接用你的readMySecret函数读取即可。若保留目录挂载,修正读取路径
如果坚持挂载到目录/run/secrets/mySecret,实际Secret内容会存在/run/secrets/mySecret/[你的Secret名称]文件中(比如你的Secret名为mySecret,路径就是/run/secrets/mySecret/mySecret)。把配置文件里的mySecretPath改成这个实际文件路径即可。调试验证挂载结构
可以在代码中添加调试逻辑,查看/run/secrets目录下的实际内容,确认文件路径:import { readdir } from 'fs/promise'; async function checkSecretsDir() { const files = await readdir('/run/secrets'); console.log('Secrets目录内容:', files); // 若挂载到子目录,可查看子目录内容 const subFiles = await readdir('/run/secrets/mySecret'); console.log('mySecret目录内容:', subFiles); }运行后查看Cloud Run日志,就能明确实际文件路径,再调整读取逻辑。
二次核对权限配置
虽然你已配置Secret Manager Secret Accessor权限,仍需确认:- 服务账号确实被授予了该角色
- 在Secret Manager的Secret权限设置中,已将该服务账号添加为成员并绑定对应角色
内容的提问来源于stack exchange,提问作者branperr
相关产品推荐
相关产品推荐

