dee*_*ejo 8 spring environment-variables docker spring-boot 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" ]
Run Code Online (Sandbox Code Playgroud)
在 .Dockerfile 文件中:
ENTRYPOINT [ "sh", "-c", "java -Dspring.profiles.active=**${ENV}** -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
Run Code Online (Sandbox Code Playgroud)
在运行 docker 时:
docker run --env ENV=*local* -d -p 8080:8080 <*image id*>
Run Code Online (Sandbox Code Playgroud)
这样,当我们启动容器时,环境变量将作为本地值传递给 Dockerfile。
更新
你也可以像
ENTRYPOINT ["java","-jar", "-Dspring.profiles.active=${ENV} -Djava.security.egd=file:/dev/./urandom","app.jar"]
Run Code Online (Sandbox Code Playgroud)
而 docker 图像
docker run --env ENV=local -d -p 8080:8080 <*image id*>
Run Code Online (Sandbox Code Playgroud)
通过docker容器中的环境变量执行此操作最简单(也可能是最好的方法):
SPRING_PROFILES_ACTIVE=dev,swagger
Run Code Online (Sandbox Code Playgroud)
更新:
要将环境变量设置为docker,您无需修改Dockerfile.只需构建您的docker镜像,然后使用设置的env变量运行它:
docker run your-docker-container -e SPRING_PROFILES_ACTIVE='dev,swagger' -p 8080:8080
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10581 次 |
最近记录: |