我正在使用nodejs在共享驱动器中编写文件,并且它在我的本地机器上工作正常,但是在Openshift中部署上面的代码后,文件没有创建,这是因为OpenShift无法访问该文件夹。以下是我的代码:
writeFile() {
const sharedFolderPath = "\\server\folder";
fs.writeFile(sharedFolderPath, templatePath, (err) => {
if (err) {
console.error(err);
} else {
console.info("file created successfully");
}
})
}
如何在Openshift中使用凭据配置共享文件夹,以便我的代码可以写入文件?
答案 0 :(得分:1)
如果这是服务器端,并且您正在使用NodeJS的OpenShift S2I构建器,则只能写入/opt/app-root
下的目录。
如果您需要数据才能在重新启动容器后继续存在,那么您需要使用持久卷。然后,您可以将卷装入任何位置,只要不与目录中的其他内容重叠,您仍需要访问该目录。使用ReadWriteOnce
的持久性卷意味着您需要将部署策略从默认的Rolling
切换到Recreate
。
答案 1 :(得分:1)
默认情况下,OpenShift使用任意用户ID运行图像,例如1000010000,所以如果它在本地工作,而不是在OpenShift上工作,则可能是该目录对该用户不可写。
以下内容来自OpenShift Guidelines用于创建图片(重点是我的):
支持任意用户ID
为了支持以安全方式安装卷的运行容器,图像应该能够作为任意用户ID运行。当OpenShift为容器装入卷时,它会配置卷,使其只能写入特定的用户ID,然后使用相同的用户ID运行映像。这确保了卷只能由适当的容器访问,但要求图像能够作为任意用户ID运行。
要实现此目的,必须由图像中的进程写入的目录应该是可以写入的。此外,容器中运行的进程不得侦听特权端口(1024以下的端口)。
因此,您可能需要在Dockerfile中添加RUN chmod 777 /server/folder
以使该目录成为可写的。