当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 节点应用程序无法读取Docker镜像中的文件系统

来源:互联网 收集:自由互联 发布时间:2021-06-16
好吧,所以我有一个节点应用程序访问它的文件结构中的目录,并做了一些东西.我正在使用’fs’模块来实现这一目标.当我从其图像运行容器时,我收到以下错误: Error: ENOENT, readdir './cl
好吧,所以我有一个节点应用程序访问它的文件结构中的目录,并做了一些东西.我正在使用’fs’模块来实现这一目标.当我从其图像运行容器时,我收到以下错误:

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

我立刻想到了一大堆可能出错的东西UNTIL我连接到正在运行的容器(重新启动它之后因为容器会因错误而死…当然).当我从容器内部启动节点应用程序时..工作..没有错误.

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

编辑:

文件存在…这里的证明:

再次,如果(因为我已经附加到图中所示的容器)我运行节点server.js并ping ip:port一切都很好!目录被识别!但不是如果从图像中分离出来的话.

为了显示该文件仍然存在,让我们启动我们停止的容器并附加到它…因为你可以看到文件仍然存在. (请注意,启动容器时不会重新创建它停止时不存在的文件…它只会从停止的位置开始拾取)

如果它有帮助,这就是我使用’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);
});
ENOENT表示没有这样的目录条目;文件./classes/cs395不存在,因此fs无法读取它.检查它之前和之后是否存在.

有关详细信息,请参阅Why does ENOENT mean “No such file or directory”?.

一旦应用程序重新启动,它就可以正常工作,一种可能性是首次运行应用程序时创建文件,并且在创建应用程序之前尝试读取该文件.

网友评论