Search code examples
spring-bootdockerspring-boot-docker-plugin

Docker run with -e not working.Failed to pass spring.profiles.active in the run command


I am facing one issue with my docker file.Image build was successful but while running I am getting an error because the active profile I am setting in the run command is not reflecting.

# Get java
FROM openjdk:8-jdk-alpine


VOLUME /tmp
ARG JAR
COPY ${JAR} app.jar

EXPOSE 8080
ENV severn_js_key=1234qasw

ENTRYPOINT ["java", "-jar", "app.jar"]

My run command is like

sudo docker run -e SPRING_PROFILES_ACTIVE=dev  -p 8088:80  -t tws-apps/service:1.0.0-SNAPSHOT

I am getting a null pointer exception in the server log while executing this statement

String environment = System.getProperty("spring.profiles.active");
switch (environment) {

Please help


Solution

  • You pass the SPRING_PROFILES_ACTIVE to the docker container as a system environment variable. You should pass it as a Java System Property instead. A solution would be to run the container by overriding the entrypoint:

    docker run --entrypoint java -t tws-apps/service:1.0.0-SNAPSHOT -Dspring.profiles.active=dev -jar app.jar
    

    In alternative, in your Dockerfile change the entrypoint. It could be a script that reads the SPRING_PROFILES_ACTIVE environment variable and then runs Java with the var as a system property.

    Hope it helps.