Почему docker-compose не открывает порты для монго? - PullRequest
0 голосов
/ 07 января 2019

Я не могу заставить docker-compose открыть порт 27017 или, по крайней мере, разрешить rest установить соединение с mongo.

В любом случае, все работает нормально: docker run -p 27017:27017 mongo:latest

Это мой docker-compose.yml:

version: '3.5'
services:
  mongo:
    container_name: mongo
    image: mongo:latest
    ports:
      - "27017:27017"

  web:
    container_name: web
    build:
      context: ./src/main/ui/
    ports:
      - "80:80"

  rest:
    container_name: rest
    links:
      - mongo
    build:
      context: .
    ports:
      - "8080:8080"
    entrypoint: [ "java", "-jar", "/rest/build/libs/pBlog.jar" ]

Вывод docker ps (как вы можете видеть, порт 27017 закрыт в монго):

▶ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
08f5dfb7acb8        2d8ccd24817e        "java -jar /rest/bui…"   About an hour ago   Up 11 minutes       0.0.0.0:8080->8080/tcp   pblog_rest_1
4929257802c5        mongo               "docker-entrypoint.s…"   2 hours ago         Up 11 minutes       27017/tcp                pblog_mongo_1
816a60eb9c7f        pblog_web           "nginx -g 'daemon of…"   3 days ago          Up 11 minutes       0.0.0.0:80->80/tcp       pblog_web_1

Выход docker logs <mongoContainerId>: https://pastebin.com/raw/XZGUh4UC

Вывод docker logs <restContainerId>: https://pastebin.com/raw/F7rwKMCe (невозможно подключиться к базе данных)


Я пытался создать скрипт для запуска монго внутри контейнера. Также попытался отредактировать раздел портов в сервисе mongo на "1-65535:1-65535" (это должно открыть все порты) - тоже не будет работать. Удаление раздела ports и добавление expose: - 27017 дает тот же результат.

Похоже, что изображение монго как-то заставляет докер закрывать порты.

1 Ответ

0 голосов
/ 07 января 2019

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

Примечание. Вы успешно открыли порт, и вы сможете пропинговать его со своего ПК, но изнутри контейнеров сеть выглядит иначе.

...