无法在 docker-compose 场景中使用 npm pg 连接到 postgresql 容器
Cannot connect to postgresql container using npm pg in a docker-compose scenario
我正在使用 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
是试图连接到托管 postgresql
数据库的 postgres
服务的后端应用程序。遗憾的是,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
文件,如果服务相互了解(fibserver
可以 ping postgres
),npm pg
配置,文档和示例,在我看来一切都很好。仍然缺少一些东西。 This 是您可以找到所有内容的地方。
更新:
我在 fibserver
中放置了一个简单的断路器:当他无法连接到数据库时,它会等待一段时间并重试。嗯,fibserver
做了很多尝试来连接 do postgres
服务,甚至在 10 分钟后。可能是我对 npm pg
库的使用导致了这个问题吗?如果有人想看,我也会更新主人。谢谢。
更新:
我将 psql 安装到 fibserver 容器中,并成功连接到 postgres 服务,我认为这是我如何使用 pg 客户端的问题。这是我之前应该尝试过的。
终于有时间进一步讨论这个问题了。我在我的 fibserver 应用程序中卸载了两个 pg
模块并再次安装 pg 为我提供了一个新版本的 npm
pg
模块 (8.3.3) 而没有我可能安装的本机部分错误。单个 javascript pg
库完成工作。
我正在使用 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
是试图连接到托管 postgresql
数据库的 postgres
服务的后端应用程序。遗憾的是,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
文件,如果服务相互了解(fibserver
可以 ping postgres
),npm pg
配置,文档和示例,在我看来一切都很好。仍然缺少一些东西。 This 是您可以找到所有内容的地方。
更新:
我在 fibserver
中放置了一个简单的断路器:当他无法连接到数据库时,它会等待一段时间并重试。嗯,fibserver
做了很多尝试来连接 do postgres
服务,甚至在 10 分钟后。可能是我对 npm pg
库的使用导致了这个问题吗?如果有人想看,我也会更新主人。谢谢。
更新: 我将 psql 安装到 fibserver 容器中,并成功连接到 postgres 服务,我认为这是我如何使用 pg 客户端的问题。这是我之前应该尝试过的。
终于有时间进一步讨论这个问题了。我在我的 fibserver 应用程序中卸载了两个 pg
模块并再次安装 pg 为我提供了一个新版本的 npm
pg
模块 (8.3.3) 而没有我可能安装的本机部分错误。单个 javascript pg
库完成工作。