Докер приложения Nodejs не может подключиться к докерскому контейнеру mongodb - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть приложение nodejs, которое докеризовано и нуждается в реплицированной базе данных MongoDB.Я собрал свою реплицированную MongoDB в docker-compose и работает отлично.если я теперь запустил команду docker inspect MongoDB-primary |grep IPAddress ее печать:

"IPAddress": "",
            "IPAddress": "172.18.0.2",

в моем приложении, я передаю этот ip в виде строки mongoconnection (конечно, с именами протоколов), но приложение не может подключиться к MongoDB и выдает эту ошибкусообщение (приложение также является контейнером Docker):

 message: 'failed to connect to server [172.18.0.2:27017] on first connect [MongoNetworkError: connection 1 to 172.18.0.2:27017 timed out]',

вот мой составной файл docker mongodb:

version: '2'

services:
  mongodb-primary:
    image: 'bitnami/mongodb:latest'
    environment:
      - MONGODB_REPLICA_SET_MODE=primary
    volumes:
      - 'mongodb_master_data:/bitnami'

  mongodb-secondary:
    image: 'bitnami/mongodb:latest'
    depends_on:
      - mongodb-primary
    environment:
      - MONGODB_REPLICA_SET_MODE=secondary
      - MONGODB_PRIMARY_HOST=mongodb-primary
      - MONGODB_PRIMARY_PORT_NUMBER=27017

  mongodb-arbiter:
    image: 'bitnami/mongodb:latest'
    depends_on:
      - mongodb-primary
    environment:
      - MONGODB_REPLICA_SET_MODE=arbiter
      - MONGODB_PRIMARY_HOST=mongodb-primary
      - MONGODB_PRIMARY_PORT_NUMBER=27017

volumes:
  mongodb_master_data:
    driver: local

и мой файл Docker приложения js узла:

FROM node:6.0

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm install --only=productio


# Bundle app source
COPY . .

EXPOSE 3001

CMD [ "npm", "start" ]

как я могу это исправить?

1 Ответ

0 голосов
/ 25 декабря 2018

Ваш docker-compose не предоставляет автоматически порты tcp внешнему миру, как ваш хост-компьютер (я предполагаю, что ваш nodeJs работает на хосте и не входит в docker-compose).Это поведение docker bridge networks, вы можете прочитать больше на https://docs.docker.com/network/bridge/

Вы должны сделать одно из следующего:

Включить ваш контейнер NodeJs в docker-compose

или

Открытые порты от docker-compose.yml

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