Tengo una aplicación Spring Boot que usa perfiles para configurar en diferentes entornos. Quiero pasar esta información de perfil como parámetro a mi comando de docker run . ¿Cómo hago para hacerlo?
Aquí está mi dockerfile
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"]He intentado lo siguiente, pero ninguno funciona
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'
Por favor ayuda.
Aclaración: estoy usando varios perfiles. Por lo tanto, no quiero que se mencione el perfil activo dentro de la aplicación o el archivo docker. En cambio, quiero usar la misma aplicación y el mismo archivo docker y ejecutarlo en diferentes entornos, y pasar el perfil activo para usar en el comando de ejecución docker. Disculpas si algo de lo anterior no aclaró eso.
Puede anular cualquier propiedad de su configuración pasándola al contenedor docker usando la opción -e . Como se explica en Externalized configuration el nombre de la variable de entorno debe escribirse en mayúsculas y dividirse mediante guiones bajos. Entonces, por ejemplo, para pasar la propiedad spring.profiles.active , podría usar la variable de entorno SPRING_PROFILES_ACTIVE durante la ejecución del contenedor:
docker run -p 8000:80 -e SPRING_PROFILES_ACTIVE=dockerdev demo-appY esta variable debe ser seleccionada automáticamente por Spring desde el entorno.
Cambie Dockerfile a:
FROM openjdk:8-jdk-alpine ARG JAR_FILE=target/demo-app-1.0-SNAPSHOT.jar # environment variable with default value ENV SPRING_PROFILE=dev COPY ${JAR_FILE} /opt/lib/demo-app.jar EXPOSE 80 #run with environment variable ENTRYPOINT ["java","-Dspring.profiles.active=${SPRING_PROFILE}","-jar","/opt/lib/demo-app.jar"]y luego ejecute el contenedor pasando la variable de entorno:
docker run -p 8000:80 --rm -e SPRING_PROFILE=dockerdev demo-appUtilice application.properties en springboot para anular cualquier variable externa. Usamos mucho esto en nuestros entornos de producción.
Necesitas:
ENTRYPOINT a: ENTRYPOINT ["java","-jar","/opt/lib/demo-app.jar","--spring.config.additional-location=/application.properties"]application.properties con contenido: spring.profiles.active=dockerdev También puede anular cualquier variable utilizada en su código springboot usando application.properties y también puede anular variables específicas de springboot como se menciona aquí .
docker run a: docker run -itd -v /path/to/application.properties:/application.properties image-name De modo que application.properties de su host se montará dentro de su contenedor docker.
NOTA: Si --spring.config.additional-location no funciona, intente con la opción --spring.config.location .
Espero que esto ayude.
JAVA_TOOL_OPTIONS tal vez la respuesta correcta.
docker run -p 8000:80 -e JAVA_TOOL_OPTIONS='-Dspring.profiles.active=dockerdev' demo-app