全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-21 6 分钟 ✍️ juanwangdev

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)

📝 发现内容有误?点击此处直接编辑

← 上一篇 AppArmor/Seccomp 配置
下一篇 → 安全扫描与漏洞检测
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库