将envvariables传递给DOCKER Spring Boot

我有一个SpringBoot应用程序,它的Dockerfile如下。 我有不同的环境,如本地/ dev / qa / prod的application.properties。 当我在IDE中本地运行应用程序时,我在VM选项中传递了-Dspring.profiles.active = local ,以便加载application-local.properties。 作为docker容器运行,我构build了一个包含所有application.properties的图像。 即,对于所有的环境,它只是相同的泊坞窗图像。

当我在一个环境中运行映像时,我想以某种方式让SpringBoot了解它的开发环境,所以它必须加载application-dev.properties。 我正在使用AWS ECS来pipe理容器。

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" ] 

在Dockerfile中,ENTRYPOINT [“sh”,“-c”,“java -Dspring.profiles.active = $ {ENV} -Djava.security.egd = file:/ dev /./ urandom -jar /app.jar” ]

而在运行docker时,docker运行–env ENV = local -d -p 8080:8080 < image id >

这样,当我们调出一个容器时,环境variables获取本地值作为值并传递给Dockerfile。

在Docker容器中通过环境variables最简单(也可能是最好的方法):

 SPRING_PROFILES_ACTIVE=dev,swagger 

更新:

为了设置docker的环境variables,你不需要修改Dockerfile。 只要构build你的docker镜像,然后用envvariables集运行它:

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