如何解决在docker-compose场景中无法使用npm pg连接到postgresql容器
我正在使用npm pg
(在package.json中的"pg": "^7.18.2","pg-native": "^3.0.0"
)上,将我的新手node
应用程序连接到postgresql
数据库。我使用docker-compose
使用以下配置启动所有内容:
version: '3'
services:
postgres:
image: 'postgres:latest'
environment:
- POSTGRES_USER=postgres_user
- POSTGRES_PASSWORD=postgres_password
healthcheck:
test: ["CMD-SHELL","pg_isready -U postgres_user"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: 'redis:latest'
nginx:
restart: always
build:
dockerfile: Dockerfile.dev
context: ./nginx
ports:
- '8000:80'
depends_on:
- fibclient
- fibserver
fibserver:
build:
dockerfile: Dockerfile.dev
context: ./server
volumes:
- './server:/app'
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379
- PGUSER=postgres_user
- PGPASSWORD=postgres_password
- PGHOST=postgres
- PGPORT=5432
- PGDATABASE=postgres
depends_on:
- redis
- postgres
- fibworker
ports:
- '9229:9229'
fibclient:
build:
dockerfile: Dockerfile.dev
context: ./client
volumes:
- './client:/app'
fibworker:
build:
dockerfile: Dockerfile.dev
context: ./fibworker
volumes:
- './fibworker:/app'
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379
ports:
- '9230:9229'
depends_on:
- redis
您可以想象fibserver
是试图连接到托管postgres
数据库的postgresql
服务的后端应用。可悲的是,fibserver
应用程序在连接到数据库时始终会出现此错误:
fibserver_1 | Error: Connection terminated due to connection timeout
fibserver_1 | at Connection.<anonymous> (/app/node_modules/pg/lib/client.js:255:9)
fibserver_1 | at Object.onceWrapper (events.js:420:28)
fibserver_1 | at Connection.emit (events.js:314:20)
fibserver_1 | at Socket.<anonymous> (/app/node_modules/pg/lib/connection.js:78:10)
fibserver_1 | at Socket.emit (events.js:314:20)
fibserver_1 | at emitCloseNT (net.js:1657:8)
fibserver_1 | at processTicksAndRejections (internal/process/task_queues.js:79:21)
fibserver_1 | at runNextTicks (internal/process/task_queues.js:62:3)
fibserver_1 | at listOnTimeout (internal/timers.js:520:9)
fibserver_1 | at processTimers (internal/timers.js:494:7)
如果服务彼此了解(docker-compose
可以ping fibserver
,postgres
配置,文档和示例以及所有内容,则我仔细检查了npm pg
文件对我来说还不错。仍然缺少一些东西。 This是您可以找到全部内容的地方。
更新:
我在fibserver
中放了一个简单的断路器:当他无法连接数据库时,它会等待一段时间,然后重试。好吧,即使在10分钟之后,fibserver
仍进行了很多尝试来连接postgres
服务。可能是因为我使用npm pg
库导致此问题?如果有人想看看,我也会更新主人。谢谢。
更新: 我将psql安装到fibserver容器中,并且成功地成功连接到postgres服务,我认为这与我使用pg客户端的方式有关。这是我应该尝试过的东西。
解决方法
最后还有一些时间可以解决这个问题。我在fibserver应用程序中卸载了两个pg
模块,然后再次安装pg,为我提供了npm
pg
模块的新版本(8.3.3),而没有可能安装的本机部分错误。单个javascript pg
库可以完成这项工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。