Два docker контейнера не могут общаться - PullRequest
0 голосов
/ 20 июня 2020

У меня два контейнера docker. Один контейнер - это база данных, а другой - веб-приложение. Веб-приложение обращается к базе данных по этой ссылке http://localhost: 7200. Однако контейнер docker веб-приложения не может достичь контейнера базы данных.

Я пробовал этот docker -compose.yml, но не работал:

version: '3'
services:
  web:
    # will build ./docker/web/Dockerfile
    build: 
       context: .
       dockerfile: ./docker/web/Dockerfile
    links:
      - graph-db
    depends_on:
     - graph-db
    ports:
     - "8080:8080"
    environment:
      - WAIT_HOSTS=graph-db:7200
    networks: 
      - backend

  graph-db:
    # will build ./docker/graph-db/Dockerfile
    build:
        ./docker/graph-db
    hostname: graph-db
    ports:
      - "7200:7200"

networks:
  backend:
    driver: "bridge"

Итак У меня есть два контейнера: веб-приложение: http://localhost: 8080 / reasoner, и этот контейнер вызывает базу данных в http://localhost: 7200, которая находится в другом контейнере. Однако контейнер базы данных недоступен для веб-контейнера.

РЕШЕНИЕ

version: '3'
services:
  web:
    # will build ./docker/web/Dockerfile
    build: 
       context: .
       dockerfile: ./docker/web/Dockerfile
    depends_on:
     - graph-db
    ports:
     - "8080:8080"
    environment:
      - WAIT_HOSTS=graph-db:7200


  graph-db:
    # will build ./docker/graph-db/Dockerfile
    build:
        ./docker/graph-db
    ports:
      - "7200:7200"

и замените http://localhost: 7200 в коде веб-приложения на http://graph-db: 7200

Ответы [ 2 ]

2 голосов
/ 20 июня 2020

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

1 голос
/ 20 июня 2020

Ваш хост базы данных - graph-db, и это имя вы должны использовать в конфигурации базы данных в вашем приложении. например: http://graph-db:7200

Из docker сетевой документации (мостовые сети - сетевой драйвер по умолчанию в Docker):

Представьте себе приложение с веб-интерфейсом и серверная часть базы данных. Если вы вызываете свои контейнеры web и db , веб-контейнер может подключаться к контейнеру db по адресу db , независимо от того, на каком Docker хосте находится стек приложения. работает на.

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