在我的 Spring Boot 应用程序中,我想将属性外部化以在 Docker 容器中运行。my-server/src/main/resources/application.yml
首次部署时,应用程序会按预期加载和使用当前所在的属性。一切正常。
但是,我的问题是我需要这些属性可以根据需要进行更新,因此我需要application.yml
在 Docker 容器上访问该文件一次。但是此时,它build/docker/
在运行buildDocker
任务之前不包含在目录中,因此在首次部署后不会被复制或访问。
因此,我尝试将 Yaml 文件复制到docker/
构建目录中,将其复制到可访问目录 ( /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
该文档指出:
配置自定义配置位置时,除了默认位置外,还会使用它们。在默认位置之前搜索自定义位置。
我似乎无法弄清楚我做错了什么或误解了什么,但可能更重要的是,这是为这种 Docker 场景外部化配置的正确方法吗?