Я создаю приложение NodeJS (Express) из образа Node Docker, и мне нужно сгенерировать файлы через приложение. Всякий раз, когда я запускаю приложение за пределами Docker, мой код работает, и файл отображается, как ожидалось, но когда docker-compose up
использует его, остальная часть приложения работает нормально, но файлы не записываются. Скрипты также не вызывают ошибок, поэтому я подозреваю, что это больше связано с тем, как Docker управляет файлами в контейнерах.
Я также пробовал две разные реализации своего решения, одна с использованием библиотеки fs
, а другая с генерацией файлов с использованием ffmpeg, обе с одинаковыми результатами.
Я попробовал console.info(__dirname)
, чтобы убедиться, что я тоже ищу в нужном каталоге, но, увы, там не повезло.
Если это поможет, я работаю с образом узла и образом MySQL, используя Docker-Compose для их связывания. Я также использую диспетчер процессов PM2 (рекомендованный в учебном пособии, которому я следил) на случай, если он может предоставить любую другую полезную информацию.
Должен ли я создать какой-то том для Docker для записи файлов, или это так же просто, как добавить определенную библиотеку в мое приложение?
Я запустил приложение и настроил маршруты, которые будут писать простой текстовый файл при пинге. Они работают при запуске приложения через npm run
, но не при использовании docker-compose up
. Файлы просто не существуют, или, если они есть, они не там, где ожидалось, или где-нибудь на моей машине
Когда вы запускаете docker-compose up
, вы создаете контейнеры. Каждый контейнер соответствует службе, описанной в вашем файле docker-compose.yml
. Файлы будут записаны внутри контейнера Docker.
Файловый ввод-вывод в Docker обычно работает нормально, хотя каждый контейнер имеет собственное изолированное пространство файловой системы, которое уничтожается в конце срока службы каждого контейнера. Вещи, которые общаются в основном через файлы, как правило, труднее запускать в Docker, чем в противном случае, и обычно вы пытаетесь спроектировать контейнер для хранения всего его постоянного состояния «где-то еще», например, базы данных, если можете. У вас есть минимальный воспроизводимый пример, показывающий, что не так?
@sachav Вот в чем проблема. По сути, это непонимание с моей стороны того, как работают контейнеры Docker. Рада восполнить этот пробел в знаниях. Адаптировал мой код и повторно запустил тесты, распечатывая содержимое файловой структуры контейнера, и файлы там! Если вы обновите свой комментарий до ответа, я помечу его как решенный. Спасибо
Как узнать, что файлы не записываются? Можете ли вы привести проверяемый пример?