0

我已经开始研究托管 OpenShift Online 的小型 Discord 机器人,并且我已经到了尝试跨部署持久化数据的地步。据我所知,我应该能够创建持久卷,声明它并将其安装在我的部署配置中,然后能够读取和写入它。

不过,我终其一生都无法解决权限问题。我找到的最接近的答案是将 OPENSHIFT_DATA_DIR 环境变量设置为已安装卷的目录,如此相切讨论,但在尝试写入该目录时仍然被拒绝访问。

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

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

我已经创建了一个持久卷并使用 Access Modes Read-Write-Once 声明,部署配置已将其安装在 /data 中以读写模式。我在部署环境中添加了一个名为 OPENSHIFT_DATA_DIR 和值 /data 的变量。

到目前为止,无论我尝试过哪种组合,当我点击 bot.js 的第 123 行时,我总是以拒绝访问而告终:

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

归根结底,我真正需要弄清楚的是如何指定任意用户 OpenShift 启动我的应用程序的目录,因为它具有读/写权限。我很确定一旦我弄清楚我可以将持久卷安装到最终的任何东西上。

4

1 回答 1

0

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

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

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

于 2018-10-19T12:24:55.723 回答