Переключение профиля пружины на основе переменной среды докера не работает - PullRequest
0 голосов
/ 17 января 2019

докер-compose.yml:

services:
  server:
    image: server:latest
    environment:
    - SPRING_PROFILES_ACTIVE=dev
    ports:
    - 8080:8080
    - 18080:18080

Dockerfile:

FROM openjdk:8-jre-alpine

ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \
    SLEEP=0 \
    JAVA_OPTS="" \

RUN adduser -D -s /bin/sh server
WORKDIR /home/server

ADD entrypoint.sh entrypoint.sh
RUN chmod 755 entrypoint.sh && chown server:server entrypoint.sh
USER server

ENTRYPOINT ["./entrypoint.sh"]
# expose server ports
EXPOSE 8080 18080

ADD *.jar server.jar

entrypoint.sh:

#!/bin/sh

echo "The application will start in ${SLEEP}s..." && sleep ${SLEEP}
exec java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar "${HOME}/server.jar" "$@"

У меня есть 3 application.yml: application.yml, application-dev.yml и application-prod.yml, которые отличаются от адреса базы данных.

Но когда я запускаю docker-compose up, сервер всегда использует настройку по умолчанию, даже я упомянул, как в docker-compose.yml , что активный профиль - dev.

Я хотел бы знать, как включить другой профиль в файле docker-compose. Спасибо.

редактирование: файл server.jar создается с использованием assemble gradle.

Ответы [ 2 ]

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

Добавьте команду: пространство имен, как показано ниже:

services:
  server:
    image: server:latest
    environment:
    - SPRING_PROFILES_ACTIVE=dev
    ports:
    - 8080:8080
    - 18080:18080
    command: --spring.profiles.active=prod

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

Java -jar yourJar.jar --spring.profiles.active = prod.

И если вы хотите запустить свое проектное приложение в разных средах своей компании и для разных сред, у вас настроен другой кластер kubernetes, тогда настройте этот параметр по-разному в разных средах kubernetes для вашего приложения.Означает, что при запуске вашего образа докера в qa environmentmner qa в кластере Kubernetes передается --spring.profiles.active = qa, а также в промежуточном и промежуточном кластерах.

И даже если вы хотите использовать переменную окружения, которую вы используете, используйте

exec java ${JAVA_OPTS}
-Dspring.profiles.active={your envronment variable name describe in docker compose} -Djava.security.egd=file:/dev/./urandom -jar "${HOME}/server.jar" "$@"

Проверьте это на github: https://github.com/vaneetkataria/MicroService_Architecture/blob/master/docker-compose.yml

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

.yaml файлы обрабатываются иначе, чем файлы .properties.

Свойства будут искать файл с активным профилем в имени:
application-dev.properties
application-prod.properties
...

файлы yaml, однако все профили хранятся в одном файле, разделенном символом '---'.

Пример [с использованием существующего docker-compose.yaml]:

application.yaml:

spring:    
  application:    
    your-application-name
  [other global application settings]    
  ...   

---
spring:
    profiles: dev    
[other settings which apply only to dev environment]


---
spring:
    profiles: prod
[all production settings (will overwrite other values if present]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...