docker环境变量配置需分清“谁设谁用”:dockerfile用env设非敏感默认值,docker-compose.yml通过environment、.env文件或env_file集中管理并注入,应用代码负责读取;敏感信息禁入dockerfile,应放权限600的env_file中。

在 Linux 运维中配置 Docker 环境变量,核心是分清“谁设”和“谁用”:Dockerfile 设默认值,docker-compose.yml 或运行时做覆盖与注入,应用代码负责读取生效。
在 Dockerfile 中设非敏感默认值
Dockerfile 的 ENV 指令用于定义构建期和运行期都可用的默认变量,适合配置不随环境变化的通用参数(如端口、版本号、基础路径)。
- 语法简洁,支持链式引用:
ENV APP_HOME=/app ENV PATH=$APP_HOME/bin:$PATH - 变量在镜像构建后固化,所有容器实例共享该默认值
- 禁止存放密码、密钥等敏感信息——一旦写入镜像,可能被反向提取
- 运行时可用
-e覆盖,例如docker run -e PORT=8081 my-app会覆盖 Dockerfile 中的ENV PORT=3000
在 docker-compose.yml 中集中管理多服务变量
运维部署多容器应用时,推荐用 docker-compose.yml 统一控制环境变量,兼顾可读性、复用性和安全性。
- 直接内联写法(适合少量非敏感变量):
environment:- TZ=Asia/Shanghai- LOG_LEVEL=warn - 引用项目级
.env文件(推荐):
在 compose 同目录建.env(不提交 Git),内容如:DB_HOST=db-prodREDIS_URL=redis://cache:6379
然后在 yml 中用${DB_HOST}引用,自动加载 - 加载专用 env_file(适合不同环境隔离):
env_file:- ./prod.env- ./secrets.env
文件路径为相对路径,每行KEY=VALUE,支持 # 注释
关键注意事项
环境变量不是“设了就生效”,必须配合应用逻辑才能起作用。
- 变量名严格区分大小写,
DB_URL和db_url是两个变量 - docker-compose 加载
.env文件仅用于替换 yml 中的${VAR}占位符,它本身不注入到容器内;要注入容器,仍需通过environment或env_file显式声明 - 修改
.env或 yml 后,旧容器不会自动更新——需docker-compose down && docker-compose up -d重建 - 敏感值优先走
env_file(如./secrets.env),并确保文件权限为600:chmod 600 ./secrets.env











