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

Node.js+TypeORM连PostgreSQL遇DriverPackageNotInstalledError问题

解决Docker容器内TypeORM提示Postgres包未安装的问题

问题现象

Node.js服务通过TypeORM连接PostgreSQL时,本地运行正常,但在Docker容器内启动抛出错误:

caught error @ main DriverPackageNotInstalledError: Postgres package has not been found installed. Try to install it: npm install pg --save

已确认Docker容器内已安装pg@^8.8.0和typeorm@^0.2.34依赖。

核心原因及解决方案

1. 数据库主机配置错误(错误提示存在误导)

在Docker Compose默认网络中,容器无法通过127.0.0.1访问其他容器,必须使用服务名作为主机地址。当前TypeORM配置中host: '127.0.0.1'指向api容器自身,无法连接到数据库容器,进而触发TypeORM的错误提示(提示信息不准确)。

修正方法:
修改TypeORM配置中的host为docker-compose里的数据库服务名database:

export default async function postgresConnection(): Promise<Connection> {
  const config = {
    // ...其他配置项
    host: 'database', // 替换原有的'127.0.0.1'
    // ...其他配置项
  } as PostgresConnectionOptions;

  return await createConnection(config);
}

2. 确保卷挂载未覆盖容器内依赖

检查docker-compose的卷配置,避免容器内安装的pg依赖被本地目录覆盖:

  • 当前配置中的- /app/node_modules/匿名卷是正确的,用于保留容器内的依赖包,防止被本地目录覆盖。
  • 确保本地./api目录下没有node_modules文件夹,若存在会覆盖容器内的/app/api/node_modules,可能导致模块查找路径异常。

3. 重新构建镜像并重启服务

修改配置后,重新构建api镜像确保变更生效:

docker-compose build api

随后重启服务:

docker-compose up api

额外检查点

  • 确认pg依赖在package.json的dependencies中(而非devDependencies),避免生产环境安装时被跳过。
  • 验证Dockerfile中yarn install是否完整安装了所有依赖(当前Dockerfile的builder阶段已执行该命令,无需修改)。

内容的提问来源于stack exchange,提问作者Brace Sproul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:20:10