如何从 Docker 'run' 命令设置 Spring Boot 属性

Posted

技术标签:

【中文标题】如何从 Docker \'run\' 命令设置 Spring Boot 属性【英文标题】: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'。 这可能吗?

谢谢

【问题讨论】:

添加你的 docker 文件 Externalising Spring Boot properties when deploying to Docker的可能重复 是的,我知道我能做到。应该指定我正在使用脚本来运行 docker 映像。我想将此属性值作为该脚本的参数。 你可以试试 请看我的回答:docker-compose-externalize-spring-application-properties 【参考方案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"

【讨论】:

以上是关于如何从 Docker 'run' 命令设置 Spring Boot 属性的主要内容,如果未能解决你的问题,请参考以下文章

python 使用JQ从docker容器解析环境变量,然后将它们转换为参数以传递到docker run命令

如何在 circleci 作业中执行“docker run”命令

docker run 命令

docker run Influxdb

docker 容器自动启动run

使用 docker 如何使用 docker run 将文件从 docker 复制到主机 [重复]