Отображение томов Docker + окна = невероятно медленно?

В настоящее время я пытаюсь скопировать данные из моего postgres, который работает в контейнере докеров, на мой хост Windows. Для этой цели я реализовал java-приложение (также в контейнере докеров), которое использует драйвер postgres-jdbc и его CopyManager для копирования определенных данных на хост в сопоставленном томе.

Проблема: Когда я копирую данные в сопоставленный каталог Windows, это становится очень медленным. (Запись 1 ГБ данных занимает около 40 минут, без сопоставления томов всего 1 минута)

Докер-составить:

  exportservice:
    build: ./services/exportservice
    volumes:
      - samplePath:/export_data

Я уже читал, что это известная проблема, но подходящего решения не нашел. Мои службы должны работать в производственной среде, основанной на Windows. Итак, как решить эту проблему? WSL2?

С нетерпением жду вашего совета!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
0
4 310
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Монтирование папки Windows в контейнер Docker всегда происходит медленно, независимо от того, как вы это делаете. В этом отношении WSL2 даже медленнее, чем WSL1.

Лучшее решение — установить WSL2, скопировать все файлы вашего проекта в файловую систему Linux (смонтированную в Windows по адресу \\wsl$\<distro>\), запустить оттуда контейнеры и соответствующим образом смонтировать каталоги Linux. Это обходит любое взаимодействие с файлами Windows.

Я написал книгу Docker для веб-разработчиков и видеокурс, потому что не смог найти хороших руководств по началу работы, объясняющих, как создавать локальные среды разработки. Он включает инструкции и советы по Hyper-V и WSL2. Используйте код скидки dock30 для скидки 30%.

Большое спасибо! Время вызовов API увеличилось с 31 до 433 мс! Теперь я снова могу развиваться :-D

DannyThunder 09.12.2021 15:12

«Это исключает любое взаимодействие с файлами Windows». - на данный момент я могу просто переключиться на Linux, так как я больше не могу использовать какие-либо инструменты Windows во время разработки.

fnagel 20.03.2023 18:06
Ответ принят как подходящий

Используйте WSL2 вместо WSL и используйте файловую систему Linux. Но вы также можете сократить циклы записи, чтобы уменьшить накладные расходы на запись. Этого можно добиться, используя BufferedWriter в Java.

Другие вопросы по теме