Как запустить приложение nodejs в образе докера mongodb? - PullRequest
0 голосов
/ 08 января 2019

Я получаю эту ошибку, когда пытаюсь запустить команду "mongo" в контейнере bash:

Ошибка: не удалось подключиться к серверу 127.0.0.1:27017, попытка подключения не удалась: SocketException: ошибка подключения к 127.0.0.1:27017 :: вызвана :: Соединение отклонено: connect @ src / mongo / shell / mongo. js: 328: 13 @ (соединение): 1: 6 исключение: соединение не удалось

Я пытаюсь настроить новое приложение nodejs в образе докера Монго. образ прекрасно создается с помощью dockerfile в докер-хабе, и я вытаскиваю его, создаю контейнер, и все хорошо, но когда я пытаюсь записать комманду "монго" в bash, получаю ошибку. это мой докер-файл

FROM mongo:4
RUN apt-get -y update
RUN apt-get install -y nodejs npm
RUN apt-get install -y curl python-software-properties
RUN curl -sL https://deb.nodesource.com/setup_11.x | bash -
RUN apt-get install -y nodejs
RUN node -v
RUN npm --version
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
CMD [ "npm", "start"]
EXPOSE 3000

1 Ответ

0 голосов
/ 08 января 2019

Когда ваш Dockerfile заканчивается на CMD ["npm", "start"], он создает образ, который запускает ваше приложение вместо , выполняющего базу данных.

Запуск двух вещей в одном контейнере немного сложен и обычно не считается лучшей практикой. (Вы изменяете код своего приложения, чтобы создать новый образ, а также удалить и воссоздать существующий контейнер. Вы действительно хотите одновременно остановить и удалить свою базу данных?) Вам следует запустить это как два отдельных контейнера, один из которых работает со стандартным * Изображение 1006 * и второе, основанное на Dockerfile, аналогичном этому, но FROM node. Вы можете рассмотреть Docker Compose как простой инструмент оркестровки, который может управлять обоими контейнерами вместе.

Еще одна вещь, которая отсутствует в вашем примере, - это любая конфигурация, которая сообщает приложению, где находится его база данных. В Docker это почти никогда не бывает localhost («этот контейнер», , а не «этот физический хост где-то»). Вы должны добавить элемент управления для передачи этого имени хоста в качестве переменной среды. В Docker Compose вы можете указать имя блока services:, в котором работает база данных.

version: '3'
services:
  mongodb:
    image: mongodb:4
    volumes:
      - './mongodb:/data/db'
  app:
    build: .
    ports: '3000:3000'
    env:
      MONGODB_HOST: mongodb

(https://hub.docker.com/_/mongo стоит прочитать подробно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...