CMD не запускается после ENTRYPOINT в Dockerfile - PullRequest
0 голосов
/ 30 января 2019

Итак, у меня есть файл Docker, который делает это:

ENV ENV ${ENV}
ENV SERVICE_NAME ${SERVICE_NAME}
USER app
ENV HOME=/home/app
COPY target /home/app/target
COPY entrypoint.sh /home/app
WORKDIR /home/app
ENTRYPOINT /usr/bin/chamber exec ${ENV}_${SERVICE_NAME} -r 1 -- ./entrypoint.sh
CMD java -jar -Dspring.profiles.active=docker target/my.jar

Итак, ENTRYPOINT запускает и извлекает некоторые секреты из хранилища параметров AWS и заполняет их в оболочке entrypoint.sh в качестве переменных среды.Затем entrypoint.sh выполняет с ними некоторые действия, создает несколько файлов и т. Д., А в последней строке он выполняет «exec $ @».

Затем я ожидал, что CMD запустится, но все, что он может увидеть, - это служба systemd.файл с именем «ExecStop = / usr / bin / docker stop app».

Файл службы systemd делает это для запуска контейнера:

ExecStart=/usr/bin/docker run --name app --memory-reservation=128m --memory=512m -e ENV=dev -e SERVICE_NAME=app 1234567890.dkr.ecr.eu-west-2.amazonaws.com/app:latest

Что случилось с CMD?

1 Ответ

0 голосов
/ 30 января 2019

Как указано в https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact,, если объединить «форму оболочки» CMD и ENTRYPOINT, спецификация CMD будет опущена:

Exerpt from docs.docker.com

Так что вам лучше использовать «форму exec» и написать что-то вроде этого:

…
ENTRYPOINT ["/usr/bin/chamber", "exec", "${ENV}_${SERVICE_NAME}", "-r", "1", "--", "./entrypoint.sh"]
CMD ["java -jar", "-Dspring.profiles.active=docker", "target/my.jar"]

Однако это не будет работать как , потому что${ENV} и ${SERVICE_NAME} не будут расширены (поскольку потребуется оболочка).

Таким образом, самое простое и правильное решение - применить рефакторинг вашего entrypoint.sh,или если вы не хотите изменять его и по-прежнему полагаться на переменные окружения с "exec form" ENTRYPOINT, вы можете написать вместо этого:

…
RUN chmod a+x entrypoint1.sh
ENTRYPOINT ["./entrypoint1.sh"]
CMD ["java -jar", "-Dspring.profiles.active=docker", "target/my.jar"]

с файлом

entrypoint1.sh

#!/bin/bash
exec /usr/bin/chamber exec ${ENV}_${SERVICE_NAME} -r 1 -- ./entrypoint.sh "$@"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...