将env变量传递给DOCKER Spring Boot

将env变量传递给DOCKER Spring Boot,spring,docker,spring-boot,environment-variables,dockerfile,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的映像。i、 这是所有环境中唯一相同的docker映像

我有一个SpringBoot应用程序,其Dockerfile如下所示。我有不同环境的application.properties,比如local/dev/qa/prod。当我在IDE中本地运行应用程序时,我在VM选项中传递-Dspring.profiles.active=local,以便它加载application-local.properties。为了作为docker容器运行,我构建了一个包含所有application.properties的映像。i、 这是所有环境中唯一相同的docker映像

当我在环境中运行映像时,我想让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" ]
通过docker容器中的环境变量执行此操作的最简单(可能也是最好的方法):

SPRING_PROFILES_ACTIVE=dev,swagger
更新:

为了将环境变量设置为docker,您不需要修改Dockerfile。只需构建docker映像,然后使用env变量集运行它:

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

在.Dockerfile文件中:

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

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

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

虽然这样做有效,但还是有点笨重。只需设置环境变量spring.profiles.active就足够了。您还可以使用ENTRYPOINT[“java”、“-jar”、“-Dspring.profiles.active=${env}”、“app.jar”]和docker run--env env=local-d-p8080:8080
docker run --env ENV=local -d -p 8080:8080 <*image id*>