Вам нужно разбить командную строку JSON -array-format на отдельные слова. Поскольку вы явно указали Docker, что «командная» часть этого представляет собой одно слово, он ищет двоичный файл в /usr/bin
с именем java -Dlog4j.configurationFile=...
, с пробелами и параметрами и всеми как частью имени файла, и не найти его.
Как правило, вы не хотите вставлять команду, которую хотите запустить в ENTRYPOINT
, особенно если вы используете этот макет оболочки. Сделайте ENTRYPOINT
просто именем скрипта, оканчивающимся на exec "$@"
; он должен использовать синтаксис JSON -array. Сделайте CMD
фактической командой, которую вы хотите выполнить, в любом удобном синтаксисе. (Если вы пытаетесь расширить переменные окружения, синтаксис, ориентированный на оболочку, мог бы быть лучше.)
ENTRYPOINT ["/app/entrypoint.sh"]
CMD /usr/bin/java \
-Dlog4j.configurationFile=/app/resources/LINUX/${LOG4J_FILE} \
-Dpa.config=/app/resources/LINUX/${CONFIG_FILE} \
-jar /app/app.jar
Я нашел этот шаблон достаточно распространенным и полезным, который я обычно рекомендовал бы использовать ENTRYPOINT
только для этого вида скрипта-обёртки; предпочитайте указывать команду для запуска приложения под именем CMD
, даже если у вас нет оболочки входа.