数据库密码、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 的存储和挂载,所以不需要手动解密。