#spring #spring-boot #kubernetes
#spring #spring-boot #kubernetes
Вопрос:
У меня есть следующее в моем Dockerfile для запуска моего приложения Springboot:
ENTRYPOINT [ "java", "-jar", "/code/myapp/target/myapp.jar", "--spring.profiles.active=$ENV_PROFILE"]
Я определил свою переменную окружения (ENV_PROFILE) в моей конфигурации k8 YAML следующим образом:
spec:
containers:
- name: myspringboot
image: myrepo/myapp:latest
imagePullPolicy: Always
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: ENV_PROFILE
value: "test"
Однако имя среды не вводится в приложение java springboot. В журнале оно отображается как «$ENV_PROFILE». Я также попробовал использовать application.properties путем добавления spring.profiles.active=$ENV_PROFILE
, но это тоже не сработало.
Комментарии:
1. можете ли вы попробовать ($ENV_PROFILE) вместо $ENV_PROFILE в entrypoint?
Ответ №1:
Вы также можете переопределить свойства Spring (и другие свойства, определенные в свойствах приложения) по умолчанию, не указывая, какую переменную среды передавать в вашем файле свойств. Переменные среды имеют более высокий приоритет, чем значения файла свойств.
Смотрите также Внешнюю конфигурацию Spring.
Например:
spec:
containers:
- name: myspringboot
image: myrepo/myapp:latest
imagePullPolicy: Always
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: SPRING_PROFILES_ACTIVE
value: "test"
Ответ №2:
Это связано с тем, что вы не используете shell в своей точке ВХОДА. Только оболочка может выполнять замены переменных среды. В вашем случае вы можете использовать следующую ТОЧКУ ВХОДА:
ENTRYPOINT exec java -jar /code/myapp/target/myapp.jar --spring.profiles.active=$ENV_PROFILE
Этот синтаксис включает вызов «/ bin / sh -c ENTRYPOINT», а «exec» гарантирует, что java станет PID 1 внутри контейнера.