Docker compose api не может подключиться к базе данных MongoDB - PullRequest
0 голосов
/ 20 сентября 2018

Я переместил свой Mongodb из контейнера в локальную службу (это было действительно плохо при контейнере).Проблема в том, что я не могу подключиться из API узла в локально работающую службу MongoDB.Я могу заставить это работать на моем Mac, но не на Ubuntu.Я пробовал:

 - DB_HOST=mongodb://172.17.0.1:27017/proto?authSource=admin

 - DB_HOST=mongodb://localhost:27017/proto?authSource=admin

 // this works locally, but not on my Ubuntu server
 - DB_HOST=mongodb://host.docker.internal:27017/proto?authSource=admin

Попытался добавить это в мой файл Docker:

  ip -4 route list match 0/0 | awk '{print $3 "host.docker.internal"}' >> /etc/hosts && \

Также пробовал сетевой мост безрезультатно.Пример docker compose

version: '3.3'

services:
  search-api:
    build: ../search-api
    environment:
      - PORT=3333
      - DB_HOST=mongodb://host.docker.internal:27017/search?authSource=admin
      - DB_USER=dbuser
      - DB_PASS=password
    ports:
      - 3333:3333
    restart: always

1 Ответ

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

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

Либо убедитесь, что вы слушаете определенный IP или слушаете всех:0.0.0.0 В linux файл конфигурации по умолчанию установлен здесь: /etc/mongod.conf

Конкретный IP-адрес конфигурации:

net:
    bindIp: 172.17.0.1 #being your host's ip address
    port: 27017

Конфигурация открыта для всех соединений:

net:
    bindIp: 0.0.0.0
    port: 27017

Чтобы получить IP-адрес вашего хоста (из контейнера) В docker-for-mac и docker-for-windows вы можете использовать host.docker.internal В то время как в Linux вам нужно запустить ip route show в контейнере.

При собственном запуске Docker в Linux вы можете получить доступ к службам хоста, используя IP-адрес интерфейса docker0.Изнутри контейнера это будет маршрут по умолчанию.

Например, в моей системе:

$ ip addr show docker0
7: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::f4d2:49ff:fedd:28a0/64 scope link 
       valid_lft forever preferred_lft forever

А внутри контейнера:

# ip route show
default via 172.17.0.1 dev eth0 
172.17.0.0/16 dev eth0  src 172.17.0.4 

(скопировано отсюда: Как получить доступ к порту хоста из Docker-контейнера )

...