【问题标题】:Writing to files in a OpenShift Online based app在基于 OpenShift Online 的应用程序中写入文件
【发布时间】:2018-10-18 07:04:23
【问题描述】:

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

不过,我这辈子都无法解决权限问题。我找到的最接近的答案是将 OPENSHIFT_DATA_DIR 环境变量设置为已挂载卷的目录,如切线讨论 here,但在尝试写入该目录时仍然会被拒绝访问。

存储库: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 启动我的应用程序的目录,因为它具有读/写权限。我很确定,一旦我弄清楚了,我就可以将持久卷挂载到最终的任何东西上。

【问题讨论】:

    标签: openshift openshift-online


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      相关资源
      最近更新 更多