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
相关产品推荐
相关产品推荐

