【问题标题】:Passing env variables to DOCKER Spring Boot将环境变量传递给 DOCKER Spring Boot
【发布时间】:2018-03-24 17:07:55
【问题描述】:

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

当我在环境中运行映像时,我想以某种方式让 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" ]

【问题讨论】:

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


    【解决方案1】:

    通过 docker 容器中的环境变量实现此目的的最简单(也可能是最好的方法):

    SPRING_PROFILES_ACTIVE=dev,swagger
    

    更新:

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

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

    【讨论】:

      【解决方案2】:

      在 .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*>
      

      这样,当我们启动容器时,环境变量将作为本地值传递给 Dockerfile。

      更新

      你也可以这样做

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

      而 docker 镜像

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

      【讨论】:

      • 虽然这可行,但它有点笨拙。只需设置环境变量 spring.profiles.active 就足够了。
      • 你也可以使用像 ENTRYPOINT ["java","-jar", "-Dspring.profiles.active=${env}","app.jar"] 和 docker run --env ENV=local -d -p 8080:8080
      猜你喜欢
      • 2020-11-07
      • 2019-06-02
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 2022-01-16
      • 2021-06-07
      • 1970-01-01
      相关资源
      最近更新 更多