Docker Secret

By | 2025年3月28日

数据库密码、api token等敏感数据的存储可使用 docker secret 技术,但仅适用于Swarm 模式。

第一步:创建 secret

# 创建一个名为 my_db_password 的 secret,里面加密存储了密码 abc.123
echo "abc.123" | docker secret create my_db_password -

# 查看 secret 列表
docker secret ls

在容器中,secret 存储在 /run/secrets 目录里。

若将创建 secret 的命令放 startup.sh 启动脚本仍不安全,因此生成环境建议创建一个单独的文件 my_db_password.txt 来存放密码,再用 docker secret create my_db_password my_db_password.txt 创建 secret,创建完立即删除此密码文件。

第二步:给服务分配 secret

version: '3.4'

services:
  policy:
    image: mypolicy
  environment:
    - DB_PASSWORD_FILE=/run/secrets/my_db_password
  secrets:
    - my_db_password

secrets:
  my_db_password:
    external: true

Docker Swarm中可使用 secrets 属性给容器分配 secret,并赋予环境变量 DB_PASSWORD_FILE。应用程序里可读取这个环境变量得到密码文件路径,从而找到密码。找到的密码已经是明文了,Docker 已经自动处理了 Secret 的存储和挂载,所以不需要手动解密

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注