Веб-приложение Docker не может связаться с приложением API - PullRequest
0 голосов
/ 26 января 2019

В докере запущено 2 основных приложения .net (одно - веб-API, другое - веб-приложение, использующее веб-API):

Я не могу связаться с API через веб-приложение, но я могу получить доступ к API, перейдя непосредственно к нему в моем браузере на http://localhost:44389

В моем веб-приложении есть переменная окружения, в которой есть та же информация, но она не может до нее добраться.

Если бы я указывал развернутую версию моего API в Azure, он мог бы связываться с этим адресом. Похоже, проблема в том, что контейнеры разговаривают друг с другом.

Я читал, что создание моста должно решить эту проблему, но, похоже, это не так. Что я делаю не так?

Вот мой файл для создания докера:

version: '3.4'

services:
  rc.api:
    image: ${DOCKER_REGISTRY}rcapi
    build:
      context: .
      dockerfile: rc.Api/Dockerfile
    ports:
      - "44389:80"

  rc.web:
    image: ${DOCKER_REGISTRY}rcweb
    build:
      context: .
      dockerfile: rc.Web/Dockerfile
    environment:
      - api_endpoint=http://localhost:44389
    depends_on:
      - rc.api

networks:
  my-net:
    driver: bridge

Ответы [ 2 ]

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

docker-compose автоматически создает сеть между вашими контейнерами.Поскольку ваши контейнеры находятся в одной сети, вы сможете соединяться между контейнерами, используя псевдонимы.docker-compose создает псевдоним с именем контейнера и IP-адресом контейнера.Так что в вашем случае docker-compose должно выглядеть как

version: '3.4'

services:
  rc.api:
    image: ${DOCKER_REGISTRY}rcapi
    build:
      context: .
      dockerfile: rc.Api/Dockerfile
    ports:
      - "44389:80"

  rc.web:
    image: ${DOCKER_REGISTRY}rcweb
    build:
      context: .
      dockerfile: rc.Web/Dockerfile
    environment:
      - api_endpoint=http://rc.api
    depends_on:
      - rc.api

networks:
  my-net:
    driver: bridge

Как и в rc.api, открывается порт 80 в его контейнере, поэтому rc.web может получить доступ к 80 порту с http://rc.api:80 или http://rc.api (безпорт, так как порт HTTP по умолчанию 80)

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

Вам нужно позвонить http://rc.api, потому что у вас есть два контейнера, а контейнер API localhost отличается от localhost контейнера веб-приложений.

Соглашение заключается в том, что каждая служба может быть разрешена по ее имени, указанному в docker-compose.yml.

Таким образом, вы можете вызывать API на внутреннем порту 80 вместо того, чтобы выставлять его на конкретный порт.

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