Порядок путей к классам Java несовместим между хостами докеров - PullRequest
0 голосов
/ 05 декабря 2018

Я запускаю сервис Java в образе Docker, который делает что-то вроде этого:

java -server -cp 'libs/*'

Странно, я обнаружил, что он запускается на моей локальной машине, но нена сервере разработчиков, где он дал бы NoSuchMethodError.

. После некоторого копания я обнаружил, что в директории libs есть версия 2.0 и 2.1 JPA.Хотя это само по себе является проблемой (и ее легко исправить), это не объясняет несоответствия, поэтому я решил напечатать:

(ClassLoader.getSystemClassLoader() as URLClassLoader).urLs
    .forEach(::println) // kotlin

Где я обнаружил, что порядок библиотек у обоих был разныммашины.Однако он был последовательным между последующими запусками образа на той же машине, поэтому не случайным.

Хотя теперь я знаю, почему образ не запускается на сервере разработки, и я могу решить эту проблему вЭто заставляет меня задуматься: почему этот порядок не одинаков для хостов Docker?Разве воспроизводимость и последовательность не являются одним из главных аспектов Docker?Может ли порядок пути к классам зависеть от таких хитроумных вещей, как IP, имя хоста или подключенные каталоги хостов (в несвязанных местах)?

...