在我的 Spring Boot 应用程序中,我想将属性外部化以在 Docker 容器中运行。首次部署时,当前的属性my-server/src/main/resources/application.yml
由应用程序按预期加载和使用。一切正常。
但是,我的问题是我需要根据需要更新这些属性,因此我需要访问application.yml
在 Docker 容器上创建一次文件。但目前,它还没有包含在build/docker/
运行之前的目录buildDocker
任务,因此在首次部署后不会被复制或访问。
所以,我尝试的是将 Yaml 文件复制到docker/
build 目录,将其复制到可访问的目录(/opt/meanwhileinhell/myapp/conf
),并使用spring.config.location
属性将配置的位置传递到我的 Dockerfile 中的 Jar:
ENTRYPOINT ["java",\
...
"-jar", "/app.jar",\
"--spring.config.location=classpath:${configDirectory}"]
查看 Docker 容器上运行的命令,我可以看到这符合预期:
/app.jar --spring.config.location=classpath:/opt/meanwhileinhell/myapp/conf]
但是,当我更新此文件中的属性并重新启动 Docker 容器时,它不会接受更改。文件权限为:
-rw-r--r-- 1 root root 618 Sep 5 13:59 application.yml
The 文档 https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html状态:
配置自定义配置位置时,还会额外使用它们
到默认位置。在之前搜索自定义位置
默认位置。
我似乎无法弄清楚我做错了什么或误解了什么,但可能更重要的是,这是针对这种类型的 Docker 场景外部化配置的正确方法吗?