You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在docker-compose中不存文件直接使用Docker Secrets?

解决Docker Compose使用已创建的Secrets问题

前提条件

Docker Secrets是Swarm模式专属功能,必须先启用Swarm(单节点也可使用):

docker swarm init

单节点执行上述命令即可;多节点集群需按Swarm初始化流程操作。

正确的Docker Compose配置

1. 定义外部Secrets

在docker-compose.yml的顶级节点添加secrets配置,明确指定已创建的Secrets为外部资源:

services:
  # 你的服务配置
  app:
    image: your-app-image:latest
    # 方式1:将Secrets挂载为容器内文件
    secrets:
      - api-key
      - db
    # 方式2:将Secrets内容转为环境变量(需配合启动命令读取文件)
    command: sh -c 'export API_KEY=$(cat /run/secrets/api-key) && export DB_SECRET=$(cat /run/secrets/db) && exec your-app-start-command'

# 顶级Secrets配置
secrets:
  api-key:
    external: true  # 声明该Secret已通过docker secret create创建,无需Compose生成
  db:
    external: true

2. 两种使用Secrets的方式

  • 挂载为文件:默认情况下,Secrets会被挂载到容器内的/run/secrets/<secret-name>路径,应用可直接读取该文件获取密钥内容。
  • 转为环境变量:通过启动命令读取Secret文件内容并赋值给环境变量,适合依赖环境变量的应用。

错误原因解析

  1. "secrets.api-key must be a mapping":Secrets配置格式错误,比如写成了数组形式secrets: [api-key],正确格式应为每个Secret是包含external: true的映射对象。
  2. "unsupported external secret":未启用Docker Swarm模式,普通Docker Compose(非Swarm环境)不支持外部Secrets功能。
  3. 容器内环境变量为空:使用file指定文件时,仅指定了路径但未读取文件内容,或未正确挂载Secret文件到容器内。

内容的提问来源于stack exchange,提问作者delete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:27:03