如何从 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命令