Docker (compose): заставить knex работать с postgres - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь докеризировать приложение NodeJS / PostgreSQL, но я не могу запустить knex миграции, я получаю следующую ошибку:

Ошибка: подключение ECONNREFUSED 172.18.0.2: 15432в TCPConnectWrap.afterConnect [как oncomplete] (net.js: 1161: 14)

Вот мой docker-compose.yml :

version: "3"
services:
  app:
    build: .
    depends_on:
      - db
    links:
      - db
    ports:
      - "3000:3000"
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_USER: postgres
      POSTGRES_DB: users-microservice
      DB_HOST: db
  db:
    image: postgres:10.4-alpine
    expose:
      - "5432"
    ports:
      - "15432:5432"
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_USER: postgres
      POSTGRES_DB: users-microservice

Dockerfile для службы 'app':

FROM node:10.1-alpine
EXPOSE 3000 9229 15432
COPY . /home/app
WORKDIR /home/app
RUN npm install
RUN npm install -g knex
CMD ./scripts/start.sh

и в start.sh работает следующая команда:

until PGPASSWORD=$POSTGRES_PASSWORD psql -h "$DB_HOST" -U "$POSTGRES_USER" -c '\d'; do
  >&2 echo "Postgres is unavailable - sleeping"
  sleep 1
done

>&2 echo "Postgres is up - executing command"

Так что я могу подключиться к postgres через CLI, но knex не может, почему это так?Я что-то не так понимаю, я новичок в Docker?

С уважением,

1 Ответ

0 голосов
/ 24 мая 2018

Я предполагаю, что вы пытаетесь запустить команду внутри службы app, когда видите это сообщение об ошибке (но, возможно, вы можете указать)?

Тогда я думаю, что вы пытаетесьподключиться к db:15432 из app.Обратите внимание, что выражение

ports:
  - "15432:5432"

только гарантирует, что вы можете позвонить в службу с вашего компьютера host через порт 15432.Но если вы хотите позвонить в службу db из app, вам все равно придется использовать db:5432.

...