не может подключить контейнер Docker узла к контейнеру Mongo - PullRequest
0 голосов
/ 13 ноября 2018

Я получаю эту ошибку:

Server running...
{ MongoNetworkError: failed to connect to server [mongo:27017] on first connect [MongoNetworkError: getaddrinfo EAI_AGAIN mongo mongo:27017]
    at Pool.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/topologies/server.js:562:11)
    at Pool.emit (events.js:182:13)
    at Connection.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/pool.js:316:12)
    at Object.onceWrapper (events.js:273:13)
    at Connection.emit (events.js:182:13)
    at Socket.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/connection.js:245:50)
    at Object.onceWrapper (events.js:273:13)
    at Socket.emit (events.js:182:13)
    at emitErrorNT (internal/streams/destroy.js:82:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
    at process._tickCallback (internal/process/next_tick.js:63:19)
  name: 'MongoNetworkError',
  message:
   'failed to connect to server [mongo:27017] on first connect [MongoNetworkError: getaddrinfo EAI_AGAIN mongo mongo:27017]',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]: {} }

это мой докер-compose.yml

version: '3'
services:
  app:
    container_name: docker-node-mongo
    restart: always
    build: .
    ports:
      - '3001:3000'

Вот как я пытался подключиться из скрипта узла:

mongoose
  .connect(
    'mongodb://127.0.0.1:27017/test2',
    { useNewUrlParser: true }
  )
  .then(() => console.log('MongoDB Connected'))
  .catch(err => console.log("errorErrorError"));

это вывод док-контейнера ls -a

6f14a98e2d51        dockernodemongo_app       "npm start"              11 minutes ago      Up 11 minutes           0.0.0.0:3001->3000/tcp                     docker-node-mongo
f3fb55dad886        mongo                     "docker-entrypoint.s…"   24 minutes ago      Up 24 minutes           127.0.0.1:27017->27017/tcp                 mongo

вот как я запускаю mongo из другого файла docker-compose.yml:

    mongo:
        restart: always
        image: mongo
        container_name: mongo
        network_mode: "bridge"
#        expose:
#           - 27017
        volumes:
            - ./mongo_data:/data/db
        ports:
            - "127.0.0.1:27017:27017"

1 Ответ

0 голосов
/ 13 ноября 2018

Вы не можете подключить свое приложение к Монго таким способом. 127.0.0.1 относится к локальному хосту контейнера, а не к хосту. У вас есть два варианта:

  • Создайте сеть и добавьте в нее оба контейнера. Затем используйте mongodb://mongo:27017/test2, чтобы добраться до контейнера Монго. Docker будет использовать имя службы в качестве хоста, чтобы вы могли связаться с ним по этому имени.

  • Привязать mongo к 0.0.0.0 (пропустить 127.0.0.1 из объявления порта) и подключиться к базе данных, используя IP-адрес моста.

Рассмотрите первый вариант, потому что второй будет предоставлять вашу базу данных mongo Интернету, если у вас нет брандмауэра.

Например:

version: '3.5'
services:
  app:
    container_name: docker-node-mongo
    restart: always
    build: .
    ports:
      - '3001:3000'
    networks:
      - mongo

networks:
  mongo:
    external: true

Затем в вашем монго составьте файл:

version: '3.5'
services:
  mongo:
    restart: always
    image: mongo
    container_name: mongo
    expose:
      - 27017
    volumes:
      - ./mongo_data:/data/db
    ports:
      - "127.0.0.1:27017:27017"
    networks:
      - mongo

networks:
  mongo:
    name: mongo

Тогда по вашему коду:

mongoose
  .connect(
    'mongodb://mongo:27017/test2',
    { useNewUrlParser: true }
  )
  .then(() => console.log('MongoDB Connected'))
  .catch(err => console.log("errorErrorError"));

редактировать: обновленные сетевые имена

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