docker 部署 .env

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

生产环境安全建议(非常重要)

  1. .env 绝对不要提交到 git必须加进 .gitignore
  2. 服务器上的 .env 权限设为 600

    bash

    运行

    chmod 600 .env
    
  3. 密码类不要写在代码里,全部走 .env / 环境变量
  4. 更高安全:Docker Secret / Kubernetes Secret(但小项目不用)

总结(你直接照抄用)

最简单:挂载文件

yaml

volumes:
  - ./.env:/app/.env

最标准:env_file(推荐)

yaml

env_file: .env

最规范:多环境

yaml

env_file: .env.prod
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值