невозможно соединить nodeJs и postgres контейнер - PullRequest
0 голосов
/ 03 июля 2019

В настоящее время у меня возникают некоторые проблемы с докером и при подключении к нему проекта узла с postgres.Мой файл docker-compose выглядит так:

# docker-compose.yml
version: "3"

services:
  app:
    build: .
    ports:
      - "49160:8080"
    links:
      - db
    depends_on:
      - db

  db:
    image: kartoza/postgis:9.6-2.4
    environment:
      - POSTGRES_DB=mydb
      - POSTGRES_USER=postgres
      - POSTGRES_PASS=mypassword
      - POSTGRES_MULTIPLE_EXTENSIONS=postgis,pgrouting
      - ALLOW_IP_RANGE=0.0.0.0/0
    volumes:
      - pgdata:/var/lib/postgresql/data

    restart: always

volumes:
  pgdata: {}

мой Dockerfile выглядит следующим образом:

#node 8
FROM node:8

#Create app directory
WORKDIR /usr/src/app

#Install app dependencies
COPY package*.json ./

RUN npm install

#Bundle app source
COPY . . 

EXPOSE 8080

CMD ["npm", "start"]

мой экспресс-сервер имеет следующие настройки:

const { Client } = require('pg');

const client = new Client({
    user: 'postgres',
    host: 'db',
    database: 'mydb',
    password: 'mypassword',
    port: 5432
})

client.connect()

Когда язапустите docker-compose up, я сначала получаю ошибку аутентификации пароля:

postgres@mydb FATAL:  password authentication failed for user "postgres"
postgres@mydb DETAIL:  User "postgres" has no password assigned.

Чтобы исправить эту ошибку, я сделал следующие шаги:

1a) Открыл pg_hba.conf в контейнере postgres и измениллиния

local all postgres peer

до

local all postgres trust

1b) Откройте postgresql.conf и измените строку

listen_addresses = 'localhost' to listen_addresses = '*'

2) Перезапустил сервер

service postgresql restart

3) Войдите в psql и установите пароль

ALTER USER postgres with password 'mypassword';

4) Затем я восстановил свой файл резервной копии sql в свою базу данных в контейнере

Но когда я запускаю мое приложение узла в моем контейнере nodejs

sudo docker exec node_container_id node index.js

Я получил следующую ошибку:

events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE 0.0.0.0:8080
    at Server.setupListenHandle [as _listen2] (net.js:1360:14)
    at listenInCluster (net.js:1401:12)
    at doListen (net.js:1510:7)
    at _combinedTickCallback (internal/process/next_tick.js:142:11)
    at process._tickCallback (internal/process/next_tick.js:181:9)
    at Function.Module.runMain (module.js:696:11)
    at startup (bootstrap_node.js:204:16)
    at bootstrap_node.js:625:3

У меня нет другого процесса / программы, которая работает на порте 8080. Когда я делаю killall node, он выбрасывает меня из моего док-контейнера.Я даже изменил порт с 8080 на 3000, но ошибка все та же.

...