Как я могу связать mongodb с другими сервисами в docker-compose? - PullRequest
0 голосов
/ 04 апреля 2019

У меня проблема.Я сделал docker-compose, который запускает mongo и node.

Проблема в том, что я не могу использовать mongo из контейнера, я не могу запустить сервер узлов.

Здесь есть мой docker-compose:

 version: '3'
services:
  database:
    build: ./Database
    container_name: "dashboard_database"
    ports:
      - "27017:27017"
  backend:
    build: ./Backend
    container_name: "dashboard_backend"
    ports:
      - "8080:8080"
    depends_on:
      - database
    links:
      - database

Но когда я запускаю монго без контейнера, мой узел может добраться до него, я не знаю почему ...

Есть идеи?

Спасибо!

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Не определять порты в службе БД.Но впоследствии только приложение сможет получить доступ к БД.Скорее всего, это будет работать тогда.Если вы все еще хотите получить к нему доступ со своего ПК, вам следует определить сеть.Попробуйте это

 version: '3'
services:
  database:
    build: ./Database
    container_name: "dashboard_database"
  backend:
    build: ./Backend
    container_name: "dashboard_backend"
    ports:
      - "8080:8080"
    depends_on:
      - database
    links:
      - database

и для создания сети

version: '3'

networks:
  back-tier:

services:
  database:
    build: ./Database
    container_name: "dashboard_database"
    networks:
      - back-tier
    ports:
      - "27017:27017"
  backend:
    build: ./Backend
    container_name: "dashboard_backend"
    networks:
      - back-tier
    ports:
      - "8080:8080"
    depends_on:
      - database
0 голосов
/ 04 апреля 2019

Все сервисы в docker-compose находятся в сети, созданной docker-compose, и могут быть адресованы именами своих сервисов из других сервисов.В вашем случае имена служб - это база данных и серверная часть, так что, например, база данных может получить доступ к базе данных с помощью чего-то вроде tcp: // database: 27017.Вам больше не нужно связывать их.

https://runnable.com/docker/docker-compose-networking

Имейте в виду, что зависит_ только ждет запуска процесса и не ожидает его готовности к приему соединений.

https://docs.docker.com/compose/compose-file/#depends_on https://docs.docker.com/compose/startup-order

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

Если вы хотите, чтобы внешний контейнер обращался к сервису docker-compose, tne localhost: 8080 не будет работать, потому что localhost в контейнере не совпадает с localhost какна вашем локальном компьютере, где работают док-контейнеры.Вы можете вручную создать сеть докеров и подключить к ней сервисы контейнеров и компоновщиков.См. Ссылку docker-compose-network и посмотрите раздел «Существующие сети».

Помогает ли это вам?

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