当前位置: 首页 > 知识库问答 >
问题:

节点应用程序无法读取Docker映像中的文件系统

邹高峻
2023-03-14

好吧,所以我有一个节点应用程序可以访问其文件结构中的目录并对其进行处理。我正在使用“fs”模块来完成这一点。当我从它的映像运行容器时,我得到以下错误:

Error: ENOENT, readdir './classes/cs395'

我立即想到了一大堆可能出错的事情,直到我连接到正在运行的容器(重新启动它之后,因为容器会在出错时死亡......当然)。当我从容器内部启动节点应用时。成功了。。无错误。

我相信这可能与docker图像分层时处理文件系统的方式有关,但当它工作正常时,当我连接到容器时,我变得非常困惑

编辑:

如果有帮助的话,下面是我如何使用“fs”模块:

var p = "./classes/cs395";

//READ ALL FILES FROM A DIRECTORY AND EMIT THE NAME OF THE FILE
fs.readdir(p, function(err, files){
    if (err) throw err;

    files.forEach(function (file) {
        if (files.length == 1 && file == '.DS_Store'){
            io.emit('receive_file', null);
        } else {
            fs.stat(p + '/' + file, function(err, stats){
                if (err) throw err;

                if (stats.isFile() && file != '.DS_Store'){
                    var ext = path.extname(file);
                    var name = path.basename(p + '/' + file, ext);
                    io.emit('receive_file', name);
                }
            });

        }
    });  

    if (files.length == 0) {
        io.emit('receive_file', null);
    }    

    console.log(files);
}); 

共有2个答案

充修能
2023-03-14

ENOENT表示没有这样的目录条目;文件。/class/cs395不存在,因此fs无法读取它。检查它之前和之后是否存在。

请参阅为什么eNote意味着“没有这样的文件或目录”?更多信息。

因为一旦应用程序重新启动,它就开始工作,一种可能性是该文件是在应用程序首次运行时创建的,而你试图在它创建之前读取它。

夏侯衡
2023-03-14

挑战在于识别节点脚本执行的预期位置和docker中的实际工作目录。这种差异将解释您所期望的文件路径之间的差异是什么和它到底是什么。

确定您是否正在您认为的上下文中执行的最简单的方法是控制台出< code>Fs.realpathSync(" .)我希望该位置不是您认为的执行位置(但它应该与Docker映像中< code>WORKDIR的设置相匹配)。(你也可以通过改变你的“.”来证明这是你的问题暂时到绝对的路径。)

更改您的工作目录以指向您期望的“.”的位置(在您的情况下是WORKDIR /src),您应该能够使用“.”您期望的方式。

 类似资料:
  • 我试图通过使用dockerfile-maven-plugin为我的spring boot maven项目构建一个docker映像。我在Windows7上使用Docker工具箱,运行良好。 我得到以下错误: pom.xml构建 我无法得到为什么我们需要谷歌默认凭据来建立一个本地图像。请帮助我,因为我是新的Docker世界。

  • 我已经在谷歌驱动器的应用程序文件夹中创建了一个文件。 编写文件的代码 读取文件的代码 driveContentsResult的状态为false。我看过谷歌的演示,但找不到解决方案。谁能帮我找出我做错了什么,或者我可以尝试的其他方法是什么。

  • Docker image编译成功,但从Lambda运行时由于其只读文件系统而失败。 Luminati proxy为其代理管理器提供了docker集成。我复制了他们的docker文件,并将其附加到我自己的docker文件中,以便向AWS Lambda推出一个脚本。docker映像的构建成功,但在推送到Lambda时,由于只读文件系统错误而失败: 检查trackback后,错误集中在proxy\u m

  • 当我构建一个jar文件并运行它时,由于找不到图像图标,它显示一个空指针异常 这是我运行jar文件时得到的错误 但是当我在NetBeans中运行这个项目时,它运行良好 这是我列出罐子里所有文件时的输出

  • 这是我的选项2选项 但它给出了一个错误的说法 java.io.FileNotFoundException:C:\users\businesssupport\documents\netBeansProjects\InvoiceGenerator\resources\hemaslogo.jpg(系统找不到指定的路径)

  • 问题内容: 在创建新的ASP.NET Core MVC应用程序时,特别是在React / Redux(或其他需要Node.js的)模板上使用什么正确的Docker映像?如果不是特定的映像,对于由ASP.NET Core MVC支持的Node.js应用程序,应该在Dockerfile中遵循什么命令或过程? 除了运行支持MVC站点外,我不需要框架的SDK版本。 运行时映像未安装Node.js,在尝试运