如何处理 application.properties 文件中的 Docker-Secrets

Blu*_*las 8 java spring docker spring-boot docker-secrets

如何将 Docker 机密(/run/secrets 中的文件/数据)注入到 application.properties 文件中?使用环境变量安全吗?

小智 11

在 application.properties 中使用 docker 机密的最佳方法似乎是使用配置树。

如果您的 docker 机密安装到 /run/secrets (这是默认值),那么您只需将其放在spring.config.import=optional:configtree:/run/secrets/application.properties 的顶部即可。db_password然后您可以将 docker密钥用作${db_password}.

请参阅https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.external-config.files.configtree


Dan*_*res 4

首先,使用环境变量来存储秘密数据application.properties是不安全的。

当谈论秘密时,你主要有两个选择。

  1. 如果您在没有 Docker Swarm 的情况下使用 Docker Secrets ,那么您可以直接将整个application.properties密钥加载到一个 Secret 中,将其挂载在下面/run/secrets,并将其作为带有 Spring 标志的配置文件引用。

  2. 如果您将 Docker Secrets与 Docker Swarm一起使用,那么您可以将您感兴趣的具体字段存储为机密,并使用 Swarm 的配置模板将其关联起来。

例子:

echo -n "myUser" | docker secret create db_user -
echo -n "myPass" | docker secret create db_password -
echo -n "jdbc://..." | docker secret create db_url -
Run Code Online (Sandbox Code Playgroud)

应用程序属性.tmpl

spring.datasource.url={{ secret "db_url" }}
spring.datasource.user={{ secret "db_user" }}
spring.datasource.password={{ secret "db_password" }}
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

version: '3.9'
services:
  api:
    image: yourapp:1.0.0
  configs:
    - source: application.properties
      target: /usr/app/config/application.properties
  secrets:
    - db_url
    - db_user
    - db_password

configs:
  application.properties:
    template_driver: golang
    file: ./application.properties.tmpl
    name: myapp.application.properties

secrets:
  db_url:
    external: true
  db_user:
    external: true
  db_password:
    external: true
Run Code Online (Sandbox Code Playgroud)

当您使用 进行部署时docker stack deploy -c docker-compose.yml myapp,它会自动使用机密内容填充配置,并将其安装在目标路径中。