Pull to refresh

Comments 3

По поводу команды запуска приложений через CMD, по-моему мнению это неверно.

Есть образы в которых shell намеренно отсутствует. Поэтому в вашем же примере лучше запускать команду Java в dockerfile через entrypoint [java, ...], а остальные параметры передавать через env переменные.

Иногда могут возникнуть проблемы с sigterm обработкой через запуск java приложения через cmd, поскольку pid приложения не будет равен 1. Это ещё один аргумент за использование entrypoint напрямую.

Мне кажется, что Вы немного заблуждаетесь и не до конца понимаете, как работают exec и shell формы в инструкциях ENTRYPOINT и CMD. :) p.s Предлагаю оставить этот вопрос (дабы не разводить "холивар") за рамками данного обсуждения.

Для запуска наших контейнеров (с Java) мы используем инструкцию CMD в executable form.  

Хочу подчеркнуть, что именно exec form, а не shell form

Именно поэтому основной процесс (в контейнере) с PID 1 будет java, а не shell оболочка в которой запускается команда java -jar ...

См. вывод команды ps aux в контейнере с приложением: 

~ $ ps aux

PID   USER     TIME  COMMAND

    1 app      19:18 java -jar app.jar

Согласен, что не все оболочки умеют их обрабатывать, а где-то её  вовсе может и не быть, например в scratch images.

Но опять же хочу сказать, что мы используем exec form инструкции CMD.

Спасибо за ответ. Полностью согласен с вами, просто не каждый знает такие особенности команд в docker.

Я и не хотел разводить холивар. Считаю что для начинающих этот момент стоит подсветить, чтобы у них не возникло ощущения, что сделали всё верно, но что-то пошло не так.

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

Sign up to leave a comment.