web-dev-qa-db-fra.com

Passer des variables env à DOCKER Spring Boot

J'ai une application SpringBoot et son Dockerfile est le suivant. J'ai application.properties pour différents environnements comme local/dev/qa/prod. Lorsque j'exécute l'application localement dans IDE, je passe - - Dspring.profiles.active = local in VM options afin qu'il charge l'application-local.properties. Pour fonctionnant en tant que conteneurs Docker, je crée une image qui comprend toutes les applications.properties, c'est-à-dire que c'est la même image Docker pour tous les environnements.

Lorsque je lance l'image dans un environnement, je veux en quelque sorte faire en sorte que SpringBoot comprenne que son env dev, il doit donc charger application-dev.properties. J'utilise AWS ECS pour gérer les conteneurs.

FROM openjdk:8-jdk-Alpine
VOLUME /tmp
ADD target/sample-test-sb-sample-app-1.0-exec.jar app.jar
EXPOSE 8080
ENV Java_OPTS=""
ENTRYPOINT [ "sh", "-c", "Java $Java_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
8
deejo

Dans le fichier .Dockerfile:

ENTRYPOINT [ "sh", "-c", "Java -Dspring.profiles.active=**${ENV}** -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

Et lors de l'exécution du docker:

docker run --env ENV=*local* -d -p 8080:8080 <*image id*>

De cette façon, la variable d'environnement devient locale en tant que valeur et passe à Dockerfile lorsque nous montons un conteneur.

Mise à jour

Vous pouvez aussi faire comme

ENTRYPOINT ["Java","-jar", "-Dspring.profiles.active=${ENV} -Djava.security.egd=file:/dev/./urandom","app.jar"]

et tandis que l'image docker

docker run --env ENV=local -d -p 8080:8080 <*image id*>
3
deejo

La façon la plus simple (et probablement la meilleure) de le faire via une variable d'environnement dans un conteneur Docker:

SPRING_PROFILES_ACTIVE=dev,swagger

MISE À JOUR:

Pour définir les variables d'environnement sur docker, vous n'avez pas besoin de modifier Dockerfile. Créez simplement votre image docker puis exécutez-la avec l'ensemble de variables env:

docker run your-docker-container -e SPRING_PROFILES_ACTIVE='dev,swagger' -p 8080:8080
6
Danylo Zatorsky