【问题标题】:How can i set Spring Boot properties from Docker 'run' command如何从 Docker 'run' 命令设置 Spring Boot 属性
【发布时间】:2019-01-10 08:23:25
【问题描述】:

我有一个 Spring Boot 应用程序,我打算将其部署为 docker 容器。

我正在使用 DOCKERFILE 构建带有入口点的图像:ENTRYPOINT ["java", "-jar", "myFolder/app.jar"]

图像构建在 JENKINSFILE 中,如下所示: docker build . -t repo/app:latest

我正在使用脚本来运行 docker 映像。我想根据该脚本的参数设置自定义属性的值。

假设我有一个自定义属性:custom.property.isTest=false。 它控制 bean 应该返回哪个类的实例,例如

@Value("${custom.property.isTest:false}")
boolean isTest;

@Bean
public MyService myServiceImpl(){
    if(isTest) {
        return new myServiceTestImpl();
    } else {
        return new myServiceImpl();
    }
}

我希望能够在运行 docker 映像时设置此值。 例如使用参数:-e 来做这样的事情(不起作用)'custom.property.isTest=true'。 这可能吗?

谢谢

【问题讨论】:

标签: spring docker spring-boot


【解决方案1】:

你有很多选择。我建议阅读 Spring Boot 文档的Externalized Configuration section。我只复制相关选项:

  • 您的主目录上的 Devtools 全局设置属性(当 devtools 处于活动状态时为 ~/.spring-boot-devtools.properties)。
  • 命令行参数。
  • 来自 SPRING_APPLICATION_JSON 的属性(嵌入在环境变量或系统属性中的内联 JSON)。
  • Java 系统属性 (System.getProperties())。
  • 操作系统环境变量。
  • 打包 jar 之外的特定于配置文件的应用程序属性(应用程序-{profile}.properties 和 YAML 变体)。
  • 打包在您的 jar 中的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)。
  • 打包 jar 之外的应用程序属性(application.properties 和 YAML 变体)。
  • 应用程序属性打包在您的 jar 中(application.properties 和 YAML 变体)。

【讨论】:

    【解决方案2】:

    是的,你可以像 -e UPPERCASE_OF_YOUR_PROPERTY 一样传递这个变量:

    例子:

    docker run -d --name servie-name -e CUSTOM_PROPERTY_ISTEST=true  -p port:port image:tag
    

    【讨论】:

    • 谢谢。这就是我一直在寻找的。这样做更好还是通过 DOCKERFILE 更好?有什么最佳做法吗?
    • 我想你可以在运行图像时给它。如果你想运行多个不同值的图像,那么你需要给它运行时间
    • 我正在寻找人们建议的 DOCKERFILE 解决方案。我必须将参数添加到我的 JENKINSFILE,然后将其作为 --build-arg 传递给 docker build 命令,然后在我的入口点中使用它。这似乎容易多了。
    【解决方案3】:

    在运行命令...java -jar myapp.jar... 的docker 文件中,您应该能够传递-Dcustom.property.isTest=false。如果您可以提供 docker 文件的 sn-p,那将很有帮助。参数可能在引号中(例如CMD java -jar myapp.jar "-DisTest=false"

    【讨论】:

      猜你喜欢
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 2020-02-16
      相关资源
      最近更新 更多