Openshift如何访问共享文件夹

时间:2018-03-14 16:52:23

标签: node.js openshift

我正在使用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中使用凭据配置共享文件夹,以便我的代码可以写入文件?

2 个答案:

答案 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以使该目录成为可写的。