How can I start spring boot application in docker with profile?

35,955

Solution 1

There's a typo here

ENTRYPOINT ["java","-Dspring.profiles.active=test" comma missing here "-jar","/micro-boot.jar"]

Solution 2

We have 3 ways:

1. Passing Spring Profile in a Dockerfile

FROM openjdk:8-jre-alpine
...
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=test","-jar","app.jar"]

2. Passing Spring Profile in Docker run

docker run -d -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=test" --name my-app:latest

3. Passing Spring Profile in DockerCompose

version: "3.5"
services:
  my-app:
     image: my-app:latest
     ports:
       - "8080:8080" 
     environment:
       - "SPRING_PROFILES_ACTIVE=test"
Share:
35,955

Related videos on Youtube

ip696
Author by

ip696

Updated on April 19, 2020

Comments

  • ip696
    ip696 about 4 years

    I have a simple spring-boot project:

    -resources
     -application.yaml
     -application-test.yaml
    

    And I have this 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) I build image - C:\micro-boot>docker build -f Dockerfile -t micro-boot .

    2) show all images - C:\micro-boot>docker image ls -a

    micro-boot   latest  ccc9a75ebc24  4 seconds ago 112MB
    

    3) try to start C:\micro-boot>docker image ls -a

    And I get an error:

    /bin/sh: [java,-Dspring.profiles.active=test: not found
    
    • rdas
      rdas about 5 years
    • huytmb
      huytmb about 5 years
      You should passing spring.profiles.active by docker run command or docker-compose which will increase flexibility. Ex: docker run -d -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=test"
  • Tiago Medici
    Tiago Medici over 3 years
    imagine you have 4 environments dev sys staging prod, using kubernetes and dynamically you deploy the containers, you can't have different cmd like you ve shown "docker run", in this way you must have a env var of the cluster env to be used inside the docker file like $PROFILE
  • huytmb
    huytmb over 3 years
    @TiagoMedici you right, but it broad out of scope of the question. I will update answer for Kubernetes env. Thank you for your attention
  • Igor Kanshyn
    Igor Kanshyn over 2 years
    "2. Passing Spring Profile in Docker run" rocks!