环境变量是进程配置机制,不是秘密保险箱。Docker 只是把键值传给容器主进程。

方式生效阶段典型用途
Dockerfile ARG构建时构建选项
Dockerfile ENV构建后与运行时镜像默认配置
Compose environment运行时明确的环境配置
Compose env_file运行时批量加载本地配置
services:
  api:
    image: example/api:1.0
    environment:
      APP_ENV: production
    env_file:
      - runtime.env

Compose 项目中的 .env 还可以用于 YAML 变量插值,但变量被插值不代表会自动进入容器;是否注入仍由 environmentenv_file 决定。

凭据不要经过镜像层

不要把密码、令牌写入 ARGENV、Dockerfile 或构建命令。它们可能出现在镜像配置、构建历史、日志或缓存里。

构建过程中确实需要凭据时,应使用 BuildKit secret mount 或 SSH mount,让凭据只在需要它的构建指令中临时可见。开发环境可以使用不提交 Git 的本地配置文件;生产环境应使用部署平台的 Secret 管理能力,并控制读取权限。前端构建变量最终会进入浏览器下载的静态文件,永远不能承载秘密。

提交前可以检查最终配置,但不要把包含敏感值的输出保存到日志:

docker compose config

参考:Compose environment variablesBuild variablesBuild secrets