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

如何将Postgres环境变量移至.env并在Docker与Node.js中共用?

实现方案

1. 创建统一的.env文件

在项目根目录新建.env文件,集中存放所有敏感环境变量:

POSTGRES_USER=admin
POSTGRES_PASSWORD=admin@12345
POSTGRES_DB=pern_todo

2. 修改Dockerfile,移除硬编码敏感信息

无需在Dockerfile中写入敏感变量(避免将敏感内容打包进镜像),修改后的Dockerfile如下:

# Use the official PostgreSQL image as the base image
FROM postgres:15.4

# Expose the PostgreSQL port
EXPOSE 5432

3. 启动容器时加载.env文件

使用docker run的--env-file参数,直接读取.env中的变量传递给容器:

docker build -t app-postgres-image .
docker run --name pern-todo-postgres-container -d -p 5432:5432 --env-file .env app-postgres-image

4. 在JavaScript代码中使用.env变量(以Node.js为例)

  • 安装dotenv包用于加载.env文件:
    npm install dotenv --save
    
  • 在代码入口文件顶部加载.env,之后即可通过process.env访问变量:
    require('dotenv').config();
    
    const dbConfig = {
      user: process.env.POSTGRES_USER,
      password: process.env.POSTGRES_PASSWORD,
      database: process.env.POSTGRES_DB,
      host: 'localhost', // 根据容器部署地址调整
      port: 5432,
    };
    

5. 安全防护:避免敏感文件泄露

  • 根目录新建.dockerignore文件,添加.env防止敏感文件被打包进镜像:
    .env
    
  • 在.gitignore中也添加.env,避免敏感文件提交到版本控制:
    .env
    

关键注意点

不要在docker build阶段通过--build-arg传递敏感变量,因为构建参数会被记录在镜像的构建历史中,存在泄露风险。通过容器启动时加载.env的方式,敏感信息仅在容器运行时生效,不会被写入镜像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:12:15