首页 文章

在基于OpenShift Online的应用程序中写入文件

提问于
浏览
0

我已经开始研究托管OpenShift Online的一个小Discord bot了,我已经到了我试图在部署中保持数据的地步 . 据我所知,我应该能够创建持久卷,声明它并将其挂载到我的部署配置中,然后能够读取和写入它 .

我不能为我的生活过关注权限问题 . 最接近的答案我've found is setting the OPENSHIFT_DATA_DIR environment variable to the mounted volume'的目录,如切向here所讨论,但在尝试写入该目录时仍然会被拒绝访问 .

存储库:https://github.com/Solesaver/Alfred-Discord-Bot

文本转储部署配置:https://dumptext.com/RBDbnfcP

我已经创建了一个持久的卷并声称具有访问模式Read-Write-Once,部署配置将其安装在/ data处于读写模式 . 我在部署环境中添加了一个名为OPENSHIFT_DATA_DIR和value / data的变量 .

无论我到目前为止尝试了什么组合,当我点击bot.js的第123行时,我总是拒绝访问:

fs.writeFileSync(howmanyPath, JSON.stringify(howmanyObj, null, 4), 'utf8');

在一天结束时,我真正需要弄清楚的是如何指定任意用户OpenShift启动我的应用程序的目录,因为它具有读/写权限 . 我很清楚,一旦我弄明白,我就可以将持久音量安装到最终的音量上 .

1 回答

  • 0

    如果在目录路径下挂载持久卷(通过在部署配置中指定),则OpenShift用于启动容器的任意用户将可以访问该目录 . 您可以通过在正在运行的容器中打开远程shell来检查它( oc get po ,检查容器名称并在 oc rsh <pod_name> 中使用它,然后在 ls -la <mount_path> 中使用它) .

    问题可能在于如何在源代码中指定实际路径 . 它看起来应该在this commit中工作(假设部署配置在那时是相同的) . 在最近的提交中,路径看起来被硬编码为相对于当前目录,因此当尝试使用the referenced deployment config创建一个目录时,这些权限应该被拒绝,该目录在 /data 路径下安装持久卷,但是应该使用 /opt/app-root/src/data mount路径 .

    如果这不能帮助您解决问题,请考虑在问题中添加带有堆栈跟踪的完整错误消息 .

相关问题