2017-10-12 41 views
2

我有一个SpringBoot应用程序及其Dockerfile如下。我有不同的环境,如本地/ dev/qa/prod的application.properties。当我在IDE本地运行应用程序,我通过-Dspring.profiles.active =本地在VM选项,以便它加载application-local.properties。为了作为码头容器运行,我构建了一个包含所有application.properties的图像。即它仅适用于所有环境的同一个泊坞窗图像。传递ENV变量来坞窗春引导

当我运行的环境中的形象,我想以某种方式使SpringBoot了解其开发包膜,所以它必须加载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" ] 

回答

0

在Dockerfile, 入口点[ “SH”, “-c”,“Java的-Dspring.profiles.active = $ { ENV} -Djava.security.egd =文件是:/ dev /./ urandom的罐子/app.jar”]

,当运行码头工人,码头工人 运行--env ENV = 当地 -d - p 8080:8080 < 图像ID>

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

0

最简单的(也可能是最好的方式)通过环境变量做一个搬运工容器:

UPDATE:

为了设置环境变量来泊坞窗,你不需要修改Dockerfile。简单的建造码头工人的图像,然后与设定的ENV变量运行:

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

能否请你解释一下?我是Docker的新手。这个环境变量应该在哪里以及它应该何时注入Dockerfile?谢谢! – deejo

+0

已更新我的答案 –