Docker 部署:.env 文件 最标准、最安全的处理方案
你在项目里肯定会遇到这种 .env:
env
# .env 本地开发用
DB_HOST=localhost
DB_USER=root
DB_PASS=123456
REDIS_HOST=127.0.0.1
Docker 里绝对不能把 .env 打包进镜像!下面给你 3 种最常用、生产可直接用 的方案,按简单 → 推荐排序。
方案 1:挂载 .env 文件到容器(最简单)
直接把宿主机的 .env 挂载进容器,不改代码、直接兼容。
docker run 写法
bash
运行
docker run -d \
-v $(pwd)/.env:/app/.env \ # 关键:挂载 .env
-p 3000:3000 \
your-app-image
docker-compose.yml 写法
yaml
services:
app:
image: your-app
volumes:
- ./.env:/app/.env # 宿主机 .env → 容器内
ports:
- "3000:3000"
优点:
- 不用改代码,原来怎么读
.env现在还怎么读 - 修改宿主机
.env重启容器就生效
缺点:
- 敏感密码明文存在服务器上
方案 2:用 docker-compose 自带 .env 注入环境变量(推荐 🌟)
Docker Compose 会自动读取宿主机的 .env,把里面所有变量注入容器。
你的项目根目录放:
plaintext
# .env (宿主机文件)
DB_HOST=mysql
DB_USER=root
DB_PASS=mypassword
REDIS_HOST=redis
docker-compose.yml 直接用:
yaml
services:
app:
image: your-app
environment:
- DB_HOST
- DB_USER
- DB_PASS
- REDIS_HOST
# 或者更简单:
# env_file: .env
两种超简用法:
yaml
env_file: .env # 把整个 .env 丢进容器
environment: [] # 自动从宿主机 .env 读取
这是 90% 项目的标准用法!不用挂载文件、不用改代码、干净安全。
方案 3:多环境 .env(开发 / 测试 / 生产)
企业级必备:
plaintext
.env.dev # 开发
.env.test # 测试
.env.prod # 生产(服务器上)
docker-compose.yml:
yaml
services:
app:
env_file:
- .env.prod
启动:
bash
运行
docker-compose up -d
生产环境安全建议(非常重要)
- .env 绝对不要提交到 git必须加进
.gitignore - 服务器上的 .env 权限设为 600
bash
运行
chmod 600 .env - 密码类不要写在代码里,全部走
.env/ 环境变量 - 更高安全:Docker Secret / Kubernetes Secret(但小项目不用)
总结(你直接照抄用)
最简单:挂载文件
yaml
volumes:
- ./.env:/app/.env
最标准:env_file(推荐)
yaml
env_file: .env
最规范:多环境
yaml
env_file: .env.prod

1万+

被折叠的 条评论
为什么被折叠?



