Как передать параметры / переменные Java в приложение Springboot в команде Docker Run - PullRequest
0 голосов
/ 29 июня 2019

У меня есть приложение Spring Boot, которое использует профили для настройки в разных средах.Я хочу передать эту информацию профиля в качестве параметра моей команде docker run.Как мне это сделать?

Вот мой докер-файл

FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/demo-app-1.0-SNAPSHOT.jar

COPY ${JAR_FILE} /opt/lib/demo-app.jar

EXPOSE 80

# ENTRYPOINT ["java","-Dspring.profiles.active=dockerdev","-jar","/opt/lib/demo-app.jar"]
# Above line works, but not desired as profile will change in diff envs
ENTRYPOINT ["java","-jar","/opt/lib/demo-app.jar"]

Я пробовал следующее, но ни один не работает

docker run -p 8000:80 demo-app -Dspring.profiles.active=dockerdev

docker run -p 8000:80 demo-app --rm -e JAVA_OPTS='-Dspring.profiles.active=dockerdev'

Пожалуйста, помогите.

Уточнение: Я использую несколько профилей.Поэтому я не хочу, чтобы активный профиль упоминался в приложении или в файле Docker.Вместо этого я хочу использовать одно и то же приложение и файл Docker, запускать его в разных средах и передавать активный профиль для использования в команде запуска Docker.Извинения, если что-то выше, не прояснили это.

Ответы [ 3 ]

1 голос
/ 29 июня 2019

Вы можете попробовать изменить

ENTRYPOINT ["java","-Dspring.profiles.active=dockerdev","-jar","/opt/lib/demo-app.jar"]

на

ENTRYPOINT ["java","$JAVA_OPTS","-jar","/opt/lib/demo-app.jar"]

, чтобы ваше приложение внутри контейнера учитывало JAVA_OPTS, которое вы передаете во время работы контейнера.

Другой вариант, как предложил chrylis, заключается в том, чтобы передать SPRING_PROFILES_ACTIVE переменную окружения следующим образом:

docker run -p 8000:80 -e SPRING_PROFILES_ACTIVE=dockerdev demo-app

И эта переменная должна автоматически выбираться пружиной из окружения.

1 голос
/ 29 июня 2019

Используйте application.properties в Springboot для переопределения любых переменных извне.Мы интенсивно используем это в наших производственных средах.

Вам необходимо:

  • Измените ENTRYPOINT на:
ENTRYPOINT ["java","-jar","/opt/lib/demo-app.jar","--spring.config.additional-location=/application.properties"]
  • Создайте application.properties файл с содержанием:
spring.profiles.active=dockerdev

Вы также можете переопределить любые переменные, используемые в вашем коде Springboot, используя application.properties, а также можете переопределить специфические переменные Springboot, как указано здесь .

  • Также измените команду docker run на:
docker run -itd -v /path/to/application.properties:/application.properties image-name

, чтобы application.properties от вашего хоста монтировался внутри вашего док-контейнера.

ПРИМЕЧАНИЕ: Если --spring.config.additional-location не работает, попробуйте вариант --spring.config.location.

Надеюсь, это поможет.

0 голосов
/ 29 июня 2019

вы должны указать JAVA_OPTS внутри файла Docker, пример файла Docker приведен ниже.

FROM {{ env "DOCKER_REGISTRY" }}/asdf/osX-jre8:{{ env "BASE_IMAGE_VERSION" }}

ADD target/yourapp.jar /app.jar

#Environment vars
ENV NO_PREFIX true
ENV APP_NAME "xxx"
ENV APP_UUID "81b35e09-2a10-48c3-a091-xxxxxxxxx"
ENV HEALTH_CHECK_URL http://localhost:9000/health
ENV SERVICE_PORT 8080

ENV JAVA_OPTS "-Dsun.net.client.defaultConnectTimeout=2000 -Dsun.net.client.defaultReadTimeout=20000 -XX:+PrintGC -XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/alloc/logs"
...