我在 docker swarm 堆栈上运行一个 spring boot 应用程序,并且想将 docker secrets 用于令牌秘密、api 密钥等......创建秘密并使它们在我正在运行的 docker 容器中可用是没有问题的以下撰写文件:
version: "3.7"
services:
app:
image: myimage
environment:
tokenSecret: /run/secrets/tokenSecret
apiKey: /run/secrets/apiKey
secrets:
- tokenSecret
- apiKey
frontend:
.....
db:
.....
secrets:
tokenSecret:
external: true
apiKey:
external: true
秘密是由printf some_secret | docker secret create tokenSecret -
在使用 docker secrets 之前,我将属性存储在我的application.properties
文件中:
tokenSecret: some_secret
apiKey: some_key
并可以通过以下方式访问它们:
@Component
public class AppProperties {
private Environment environment;
@Autowired
public void setEnvironment(Environment environment) {
this.environment = environment;
}
public String getTokenSecret(){
return environment.getProperty("tokenSecret");
}
public String getApiKey(){
return environment.getProperty("apiKey");
}
}
现在,使用 docker secrets 并删除 application.properties,getTokenSecret
andgetApiKey
方法将返回 docker 容器中 secrets 的文件位置:"/run/secrets/tokenSecret"
而不是 secret 的内容。将秘密内容从容器文件系统加载到我的应用程序中似乎是一项简单的任务,但我仍然不知道最好的方法是什么。