Как правильно настроить приложение Keystone.js для запуска в Docker с Mongo? - PullRequest
0 голосов
/ 02 сентября 2018

Я создал свое приложение, которое работает локально. Когда я пытаюсь запустить его в Docker ( docker-compose up ), он запускается, но затем выдает сообщение об ошибке:

Creating mongodb ... done
Creating webcms  ... done
Attaching to mongodb, webcms

...

Mongoose connection "error" event fired with:
    MongoError: failed to connect to server [localhost:27017] on first connect

...

webcms exited with code 1

Я прочитал, что с Keystone.js вам нужно настроить расположение Mongo в файле .env , который у меня есть:

MONGO_URI=mongodb://localhost:27017

Вот мой файл Docker:

# Use node 9.4.0
FROM node:9.4.0

# Copy source code
COPY . /app

# Change working directory
WORKDIR /app

# Install dependencies
RUN npm install

# Expose API port to the outside
EXPOSE 3000

# Launch application
CMD ["node","keystone"]

... и мой докер-композитор

version: "2"
services:
  # NodeJS app
  web:
    container_name: webcms
    build: .
    ports:
    - 3000:3000
    depends_on:
    - mongo

  # MongoDB
  mongo:
    container_name: mongo
    image: mongo
    volumes:
      - ./data:/data/db/mongo
    ports:
      - 27017:27017

Когда я запускаю Docker PS , это подтверждает, что Монго работает и работает в контейнере ...

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
f3e06e4a5cfe        mongo               "docker-entrypoint.s…"   2 hours ago         Up 2 hours          0.0.0.0:27017->27017/tcp   mongodb

Мне не хватает какой-либо конфигурации или она настроена неправильно. Может ли кто-нибудь сказать мне, что это такое?

Любая помощь будет оценена.

Спасибо!

1 Ответ

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

Не работает должным образом, потому что вы отправляете не тот хост. ваш контейнер не понимает, что такое localhost:27017, поскольку это адрес вашего компьютера, а не адрес контейнера.

Важно понимать, что у каждой службы есть свой собственный контейнер с другим IP. Прелесть docker-compose в том, что вам не нужно знать адрес вашего контейнера! достаточно знать название вашей услуги:

version: "2"

volumes:
  db-data:
    driver: local

services:
  web:
    build: .
    ports:
      - 3000:3000
    depends_on:
      - mongo
    environment:
      - MONGO_URI=mongodb://mongo:27017

  mongo:
    image: mongo
    volumes:
      - "db-data:/data/db/mongo"
    ports:
      - 27017:27017

просто запустите docker-compose up и все готово

...