В настоящее время у меня возникают некоторые проблемы с докером и при подключении к нему проекта узла с 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, но ошибка все та же.