Secret 敏感信息管理
敏感信息(密码、API Key)不应明文传递,Docker Secret 提供安全方案。
Docker Secret(Swarm 模式)
创建 Secret
Bash
# 从标准输入创建
echo "mypassword" | docker secret create db_password -
# 从文件创建
docker secret create db_password /path/to/password.txt
# 查看 Secret
docker secret ls
使用 Secret
YAML
# docker-compose.yml
version: '3.8'
services:
db:
image: postgres:15
secrets:
- db_password
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
secrets:
db_password:
external: true
Bash
# 容器内读取
cat /run/secrets/db_password
外部 Secret 管理
环境变量传入
Bash
# 从环境变量传入(不写入文件)
DB_PASSWORD=mypassword docker compose up -d
YAML
services:
app:
environment:
DB_PASSWORD: ${DB_PASSWORD}
Docker Vault
Bash
# 使用 HashiCorp Vault
vault kv put secret/db password=mypassword
# 容器通过 Vault API 读取
加密传递
Bash
# 使用加密 Secret
docker secret create encrypted_secret --encrypted
# Swarm 模式加密传输
# Secret 在节点间加密传输,不落盘
避免明文
错误做法
YAML
# 不要这样做
services:
app:
environment:
DB_PASSWORD: mypassword123 # 明文暴露在 YAML
正确做法
YAML
# 使用环境变量
services:
app:
environment:
DB_PASSWORD: ${DB_PASSWORD}
# 或使用 Secret
services:
app:
secrets:
- db_password
Secret 轮转
Bash
# 创建新 Secret
docker secret create db_password_v2 -
# 更新服务使用新 Secret
docker service update \
--secret-rm db_password \
--secret-add db_password_v2 \
my-service
# 删除旧 Secret
docker secret rm db_password
Kubernetes Secret
YAML
# K8s Secret 配置
apiVersion: v1
kind: Secret
metadata:
name: db-credentials
type: Opaque
data:
password: bXlwYXNzd29yZA== # Base64 编码
Docker Secret 仅 Swarm 模式可用,单机使用环境变量或外部 Secret 管理。
要点总结
- Docker Secret 在 Swarm 模式管理敏感信息,加密传输
- Secret 挂载到
/run/secrets/,容器内读取 - 避免在 YAML 中明文暴露密码,使用环境变量或 Secret
- Secret 轮转创建新版本,更新服务后删除旧版本
- 非 Swarm 环境使用外部 Secret 管理(Vault、K8s Secret)
📝 发现内容有误?点击此处直接编辑