У меня есть приложение, работающее в нескольких контейнерах, и я использую docker -compose для запуска этих служб внутри контейнеров. Я использую NodeJS с postgresql, используя библиотеку node- postgresql (pg). Когда я запускаю приложение на моей локальной машине, оно работает отлично. А также, когда я собираю приложение на сервере Ubuntu aws e2, оно создается без каких-либо ошибок. И когда я пытаюсь проверить конечные точки, это работает довольно хорошо. Но когда я пробую конечную точку, которая включает в себя вызов базы данных, ответ не получен. Я попытался отладить приложение, добавив несколько журналов консоли, и я думаю, что проблема с библиотекой pg. Когда код достигает pool.query, он просто висит там без каких-либо ошибок. Я попытался console.log, попробуйте перехватить ошибки, но каждый раз, когда код останавливается в pool.query () и он зависает. Есть идеи, почему это происходит? Несколько часов пытался найти решение в сети, но безуспешно.
Я нашел еще одну похожую проблему здесь https://github.com/brianc/node-postgres/issues/2069
My docker -compose.yml
version: '3'
services:
postgres:
container_name: postgres
image: mdillon/postgis
environment:
POSTGRES_MULTIPLE_DATABASES: user_data,gov_auth
POSTGRES_USER: commhawk
POSTGRES_PASSWORD: password
volumes:
- postgres:/data/postgres
- ./database:/docker-entrypoint-initdb.d
ports:
- "5433:5432"
restart: unless-stopped
rethinkdb:
container_name: rethinkdb
image: rethinkdb:latest
ports:
- "3004:8080"
- "29015:29015"
- "28015:28015"
volumes:
- rethinkdb:/data
user_data_service:
build: './user_data_service'
container_name: uds
ports:
- "3002:3000"
depends_on:
- postgres
environment:
DATABASE_URL: postgres://commhawk:password@postgres:5432/user_data
# volumes:
# - ./user_data_service:/src
# - container_node_modules:/src/node_modules
gov_authority_service:
build: './gov_authority_service'
container_name: gov_auth
ports:
- "3001:3000"
depends_on:
- postgres
environment:
DATABASE_URL: postgres://commhawk:password@postgres:5432/gov_auth
# volumes:
# - ./gov_authority_service:/src
socket_service:
build: './socket_service'
container_name: socket
ports:
- "3003:3000"
depends_on:
- rethinkdb
# volumes:
# - ./socket_service:/src
api_gateway:
image: express-gateway:latest
ports:
- "8080:8080"
depends_on:
- user_data_service
- socket_service
- gov_authority_service
volumes:
- ./api_gateway/gateway.config.yml:/var/lib/eg/gateway.config.yml
volumes:
postgres:
rethinkdb:
# container_node_modules:
Просто, когда я бегу, как показано ниже , он останавливается без какого-либо результата. Когда я включаю это в try catch, ошибка также не отображается. Нет способа отладки
let result = await pool.query("SELECT NOW()")
console.log(result)
Узел- postgresql connection
const {Pool} = require("pg");
const pool = new Pool({
user: "commhawk",
host: "postgres",
database: "gov_auth",
password: "password",
port: "5432"
});
module.exports = pool;
Пробовал также с connectionString также. Все еще не повезло !!
Может предоставить больше информации, если это необходимо. Заранее спасибо
ОБНОВЛЕНИЕ (РЕШЕНИЕ)
Хорошо, так что я разобрался с ошибкой. Когда я собрал его на своей локальной машине, он использовал nodejs 13 и pg 8.0.2. Но когда я пытался собрать его на своем сервере (например, через 1 месяц после сборки на локальном), так как я использую нод: последний в моем Dockerfile, он извлекает последнюю версию, которая nodejs 14. Nodejs 14 несовместима с пг 8.0.2. Вот почему локальные версии работают хорошо, а серверная версия дает сбой.
Решения:
- Понижение nodejs до 13 для использования с pg 8.0.2
- Обновление pg до 8.0.3 для использования с nodejs 14