Итак, у меня есть приложение узла, которое обращается к каталогу в своей файловой структуре и что-то с ним делает. Для этого я использую модуль «fs». Когда я запускаю контейнер из его образа, я получаю следующую ошибку:
Error: ENOENT, readdir './classes/cs395'
Я сразу же подумал о целой куче вещей, которые могут быть неправильными, ПОКА я не подключился к работающему контейнеру (после его перезапуска, потому что контейнер умрет при ошибке... конечно). Когда я запустил приложение узла из контейнера... оно сработало... без ошибок.
Я полагаю, что это может быть как-то связано с тем, как обрабатываются файловые системы, когда образы докеров многоуровневые, но когда это работало нормально, когда я прикреплялся к контейнеру, я действительно запутался.
РЕДАКТИРОВАТЬ:
Файл ДЕЙСТВИТЕЛЬНО существует... вот доказательство: Опять же, если (поскольку я подключен к контейнеру, как показано на картинке) я запускаю
node server.js
и пингую 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);
});