【问题标题】:How do I pass external application properties to springboot app in a docker container如何将外部应用程序属性传递给 Docker 容器中的 Spring Boot 应用程序
【发布时间】:2018-04-10 10:17:56
【问题描述】:

请我阅读似乎解决此问题的帖子,但我仍然无法解决我的问题。我在 docker 容器内运行的 spring boot 应用程序中有一个默认的 application.properties,但是我想添加外部 application.properties。

这是我的 docker 文件:

FROM tomcat:8-alpine
COPY target/demoapp.war /usr/local/tomcat/webapps/demo.war
RUN sh -c 'touch /usr/local/tomcat/webapps/demo.war'
EXPOSE 8080
ENTRYPOINT [ "sh", "-c", "java -Djava.security.egd=file:/dev/./urandom -jar /usr/local/tomcat/webapps/demo.war", "--spring.config.location=C:/Users/650/Documents/Workplace/application.properties"]

我使用以下方法构建文件:

docker build . -t imagename

我使用以下命令运行 spring boot docker 容器:

docker run -p 8080:8080 -v C:/Users/650/Documents/Workplace/application.properties:/config/application.properties --name demosirs --link postgres-
standalone:postgres -d imagename

容器仍然找不到我的外部 application.properties,请问我该如何克服这个挑战?

【问题讨论】:

    标签: java docker spring-boot application.properties


    【解决方案1】:

    您指的是 docker ENTRYPOINT 命令中的主机路径。只需参考容器具体路径即可:

    ENTRYPOINT [ "sh", "-c", "java -Djava.security.egd=file:/dev/./urandom -jar /usr/local/tomcat/webapps/demo.war", "-- spring.config.location=/config/application.properties"]

    而且,我注意到,您使用文件作为 -v 参数的值 docker run。所以改成对应的目录:

    -v C:/Users/650/Documents/Workplace:/config

    【讨论】:

    • 感谢您的更正,但容器仍在获取外部 application.properties 文件。
    • 如何验证容器没有捡起它?你看日志吗?如果是,请将它们附加到您的问题中。
    • 另外,我注意到,您正在对 war 文件调用 java -jar。如果demo.war 被构建为Web 存档,那么它意味着在tomcat 容器中运行,而不是作为Java 应用程序。在这种情况下,您可能必须调用 start-tomcat.sh 或类似的东西。如果你想用它的嵌入式容器运行演示应用程序,那么我猜你可能会在你的target 目录中有一个独立的可执行 jar。您似乎在关注:spring.io/guides/gs/spring-boot-docker。请注意,那里的可执行文件是app.jar 而不是war
    • 我可以验证容器没有选择属性,因为我的数据库属性在里面,并且当容器运行时,它会引发与数据库连接相关的错误。
    • 此外,如果我不将 application.properties 外部化,我可以使用完全相同的 Dockerfile 构建、执行和运行 demo.war 文件。如果我将 application.properties 放在项目中,效果会很好。谢谢
    【解决方案2】:

    在你的入口点传递另一个参数

    -Dspring.config.location=<your custom property file location>

    【讨论】:

      【解决方案3】:

      您可以尝试提供文件路径而不是类路径。

       "--spring.config.location=file:${configDirectory}/application.yml"
      

      你可以使用spring cloud config项目。

      https://spring.io/guides/gs/centralized-configuration/

      【讨论】:

        猜你喜欢
        • 2021-03-21
        • 2019-05-16
        • 2020-11-14
        • 1970-01-01
        • 2015-04-03
        • 2020-12-15
        • 2022-01-21
        • 2022-01-22
        • 2016-10-21
        相关资源
        最近更新 更多