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

部署NestJS+PostgreSQL(Docker)至DigitalOcean时连接被拒绝求助

问题

尝试将NestJS项目部署至DigitalOcean时遇到数据库连接问题,操作步骤如下:

  1. 创建Docker网络后,启动Postgres容器:
docker run --name postgre -d -p 5432:5432 --network backend -e POSTGRES_PASSWORD=0808 -e POSTGRES_DB=webs postgres
  1. 修改.env.production中的数据库主机为容器名:
POSTGRES_HOST=postgre

其余配置与.env.deployment一致,完整环境变量配置如下:

POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_USER=postgres
POSTGRES_DB=webs
POSTGRES_PASSWORD=0808
  1. 拉取DockerHub镜像启动NestJS容器:
docker container run -p 3000:3000 --network backend --env .env.production --name mindgame musnn/mindgame

启动后出现错误:

[Nest] 1  - 01/07/2023, 10:02:59 AM   ERROR [ExceptionHandler] connect ECONNREFUSED 127.0.0.1:5432
SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:5432

同时附上app.module.ts与Dockerfile配置,求解决方法。

解决方法

1. 修正NestJS容器的环境变量加载命令

你使用的--env .env.production参数错误,Docker中加载整个.env文件需要用--env-file参数,正确启动命令为:

docker container run -p 3000:3000 --network backend --env-file .env.production --name mindgame musnn/mindgame

这是核心问题——之前的命令未正确加载.env.production里的POSTGRES_HOST=postgre,导致应用仍使用默认的localhost连接数据库。

2. 验证Postgres容器状态

执行命令检查Postgres容器是否正常运行:

docker ps

确保postgre容器处于Up状态,若未运行则启动它:

docker start postgre

也可进入容器验证数据库可用性:

docker exec -it postgre psql -U postgres -d webs

能正常进入则说明Postgres服务无问题。

3. 确认Docker网络连通性

进入NestJS容器测试与Postgres的连通性:

docker exec -it mindgame sh
ping postgre

若能ping通则网络正常;若不行,检查两个容器是否都在backend网络中:

docker network inspect backend

查看输出的Containers部分,确认两个容器均在该网络内。

4. 检查NestJS数据库配置

确保app.module.ts正确读取环境变量,以Sequelize为例,配置应类似:

@Module({
  imports: [
    SequelizeModule.forRoot({
      dialect: 'postgres',
      host: process.env.POSTGRES_HOST,
      port: parseInt(process.env.POSTGRES_PORT, 10),
      username: process.env.POSTGRES_USER,
      password: process.env.POSTGRES_PASSWORD,
      database: process.env.POSTGRES_DB,
      autoLoadModels: true,
      synchronize: true,
    }),
  ],
})
export class AppModule {}

避免硬编码host: 'localhost'。

5. 检查Dockerfile环境变量设置

确保Dockerfile中没有用ENV指令硬设置POSTGRES_HOST=localhost,否则会覆盖外部传入的环境变量。


内容的提问来源于stack exchange,提问作者Nuran Gozalova

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:16:06