![](/img/trans.png)
[英]How would I set "spring.datasource.password" using a docker secret?
[英]How can I set the property spring.cloud.config.server.git.password using docker secret
我想对我的 spring 云配置服务器应用程序进行 docker 化。 我正在创建一个 docker 秘密git-repo-pass
来存储 github 帐户密码。 我将环境SPRING_CLOUD_CONFIG_SERVER_GIT_PASSWORD
设置为 docker 秘密的默认路径/run/secrets/git-repo-pass
。 但是,当我运行 compose 并检查容器时,我发现环境实际上是设置为路径而不是该路径的内容。
在下面分享我的 docker-compose.yml 文件,
version: '3.8'
services:
config-standalone:
container_name: config-standalone
image: ss-config:1.0
ports:
- "8888:8888"
secrets:
- git-repo-pass
environment:
- SPRING-CLOUD-CONFIG-SERVER-GIT-PASSWORD=/run/secrets/git-repo-pass
secrets:
git-repo-pass:
external: true
抛出异常: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Cannot load environment] with root cause
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Cannot load environment] with root cause
如果有办法使用 docker 秘密加载应用程序属性,请告诉我。 谢谢你 !!
基本上,机密只是文件,安全存储并在容器启动时挂载。 它不会自己成为一个环境变量,所以你必须让它发生。
使事情运行的最快方法是将启动命令修改为类似export SPRING-CLOUD-CONFIG-SERVER-GIT-PASSWORD=$(cat /run/secrets/git-repo-pass) && <actual_command>
,它将文件读入环境变量,然后执行它应该执行的任何操作。 您可以使用服务名称下的command
选项在撰写文件中使其正确。
解决这个问题的正确方法是创建第二个变量并更改应用程序以读取位于变量中存储路径的文件。 这类似于 Docker 图像维护者的一种常见做法,即为末尾带有FILE
的秘密提供第二个变量,例如SPRING-CLOUD-CONFIG-SERVER-GIT-PASSWORD-FILE
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.