У меня есть простой проект с весенней загрузкой:
-resources
-application.yaml
-application-test.yaml
А у меня есть Dockerfile:
FROM openjdk:8-jdk-alpine
EXPOSE 8080
ADD micro-boot.jar micro-boot.jar
ENTRYPOINT ["java","-Dspring.profiles.active=test" "-jar","/micro-boot.jar"]
1) Создаю образ - C:\micro-boot>docker build -f Dockerfile -t micro-boot .
2) показать все изображения - C:\micro-boot>docker image ls -a
micro-boot latest ccc9a75ebc24 4 seconds ago 112MB
3) попробуй завести C:\micro-boot>docker image ls -a
И получаю ошибку:
/bin/sh: [java,-Dspring.profiles.active=test: not found
Вы должны передать spring.profiles.active с помощью команды запуска docker или docker-compose, что повысит гибкость. Пример: docker run -d -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=test"




Здесь опечатка
ENTRYPOINT ["java","-Dspring.profiles.active=test" comma missing here "-jar","/micro-boot.jar"]
У нас есть 3 пути:
1. Передача профиля Spring в Dockerfile
FROM openjdk:8-jre-alpine
...
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=test","-jar","app.jar"]
2. Передача профиля Spring в Docker run
docker run -d -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=test" --name my-app:latest
3. Передача профиля Spring в DockerCompose
version: "3.5"
services:
my-app:
image: my-app:latest
ports:
- "8080:8080"
environment:
- "SPRING_PROFILES_ACTIVE=test"
представьте, что у вас есть 4 среды dev sys staging prod, использующие kubernetes и динамически развертывающие контейнеры, у вас не может быть другого cmd, как вы показали «docker run», таким образом, вы должны иметь env var кластера env, чтобы быть используется внутри файла докера, например $PROFILE
@TiagoMedici, вы правы, но это выходит за рамки вопроса. Я обновлю ответ для Kubernetes env. спасибо за Ваше внимание
«2. Передача профиля Spring в Docker run» потрясающая!
Связано: stackoverflow.com/questions/21553353/…