docker-compose.yml для postgres, обнаружившей ошибку - PullRequest
0 голосов
/ 20 сентября 2018

Я создаю нод, экспресс, веб-приложение postgres,

npm run dev

работает нормально, но я пытаюсь зарегистрировать свое приложение вВ контейнере используется Docker, у меня есть 2 файла Dockerfile и docker-compose.yml, оба из которых перечислены ниже, и я получаю следующую ошибку.

Может кто-нибудь, пожалуйста, помогите мне исправить эту ошибку.Кроме того, перед запуском docker-compose up я убедился, что в порту 5432 не запущены процессы.

node_1      | (node:28) UnhandledPromiseRejectionWarning: Error: connect ECONNREFUSED 127.0.0.1:5432
node_1      |     at Object._errnoException (util.js:992:11)
node_1      |     at _exceptionWithHostPort (util.js:1014:20)
node_1      |     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1186:14)
node_1      | (node:28) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
node_1      | (node:28) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Dockerfile

FROM node:8
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "node", "server.js" ]

docker-compose.yml

version: '2'
services:
  node:
    build: .
    command: npm run dev
    volumes:
      - .:/usr/src/app/
      - /usr/src/app/node_modules
    ports:
      - "3000:3000"
    depends_on:
      - postgres
    links:
      - postgres
    environment:
      DATABASE_URL: postgres://localhost:5432/dreamhouse
  postgres:
    image: postgres:9.6.2-alpine
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER:
      POSTGRES_DB: dreamhouse`

1 Ответ

0 голосов
/ 20 сентября 2018

Похоже, ваш сервер узлов пытается подключиться к postgres, прежде чем он будет готов принимать соединения.Даже при том, что вы использовали depends_on, который только гарантирует, что сервер postgres работает.

Что вы можете сделать, это использовать скрипт, чтобы заставить ваш сервер узлов ждать готовности postgres перед запуском.Один из способов сделать это - использовать bash-скрипт с wait-for-it .Вы можете использовать что-то вроде:

start_node.sh

#!/bin/bash

# This line says for the "wait-for-it" script to wait for localhost:5432 without timeout (-t 0)
./wait-for-it.sh localhost:5432 -t 0

# When "wait-for-it" is done, you can start your server
npm run dev

docker-compose.yml

services:
  node:
    build: .
    command: ./start_node.sh
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...