Причина, по которой ваш пример не работает, состоит в том, что вы неправильно понимаете, что такое docker (compose) и как он работает. Это не менеджер пакетов для ваших библиотек Java, а инструмент для объединения целых приложений.
Итак, подробно вы настроили следующее: projectA создает контейнер Docker, используя ваш Dockerfile, создает библиотеки ProjectA Java и, наконец, устанавливаетупакованный jarfile в docker-контейнер локальных файловых систем maven папок. Дополнительно параллельно вы пытаетесь запустить projectB. Это означает, что у вас есть две проблемы:
- работающие контейнеры не знают друг о друге, поскольку они ничего не делят, но даже если вы решите эту проблему, например, поделившись томом между ними, вывсе еще есть проблема
- compose не подразумевает порядок и выполняет несколько контейнеров параллельно. Таким образом, вы можете столкнуться с ситуациями, когда это может сработать и при следующем запуске не будет работать снова, так как B выполняется до того, как будет выполнен A.
Чтобы решить эту проблему, у вас есть несколько вариантов, которые я хотел быПредложите сделать следующее: - Создайте A и B вне контейнеров на вашем компьютере, используя многомодульный файл pom, который организует сборку, и добавьте только последний jar в образ докера, который вы можете отправить. Если это работает, вы также можете выполнить сборку в контейнере.
Но чтобы просто попробовать, чтобы обе ваши сборки работали, вы можете создать том и смонтировать его в обоих контейнерах в папку maven, которая /root/.m2
, если вы не изменили пользователя по умолчанию.
Но я настоятельно рекомендую вам также прочитать о том, как docker обрабатывает многоступенчатые сборки и как он обрабатывает тома, здесь: