将env变量传递给DOCKER Spring Boot

时间:2017-10-12 16:55:31

标签: spring docker spring-boot environment-variables dockerfile

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

当我在环境中运行图像时,我想以某种方式让SpringBoot理解它的dev env,因此它必须加载application-dev.properties。我使用AWS ECS来管理容器。

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

2 个答案:

答案 0 :(得分:5)

通过docker容器中的环境变量执行此操作最简单(也可能是最好的方法):

SPRING_PROFILES_ACTIVE=dev,swagger

更新:

为了将环境变量设置为docker,您无需修改​​Dockerfile。只需构建您的docker镜像,然后使用设置的env变量运行它:

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

答案 1 :(得分:3)

在.Dockerfile文件中:

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

在运行码头时:

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

这样,环境变量作为值获取local,并在我们调出容器时传递给Dockerfile。