как получить доступ к URL-адресу вне контейнера docker - PullRequest
0 голосов
/ 06 августа 2020

У меня есть веб-интерфейс и веб-приложение api, и оба имеют поддержку docker, а вот файл docker для него.

version: '3.4'

services:
webfrontend:
image: ${DOCKER_REGISTRY-}webfrontend
build:
  context: .
  dockerfile: WebFrontEnd/Dockerfile

mywebapi:
image: ${DOCKER_REGISTRY-}mywebapi
build:
  context: .
  dockerfile: MyWebAPI/Dockerfile

Поскольку оба приложения используют одну и ту же сеть, поэтому внутренний DNS разрешается, и я могу получить доступ к веб-API из внешнего приложения, как показано ниже,

 using (var client = new System.Net.Http.HttpClient())
        {
            // Call *mywebapi*, and display its response in the page
            var request = new System.Net.Http.HttpRequestMessage();
            request.RequestUri = new Uri("http://mywebapi/WeatherForecast");
            var response = await client.SendAsync(request);
            
        }

Здесь URL-адрес веб-API http://mywebapi/WeatherForecast доступен ТОЛЬКО для внешнего приложения в коде (внутренне), но когда я пытаюсь просмотреть этот URL-адрес через браузер или почтальон, он не работает.

  • В чем причина? (браузер или почтальон не в контейнерной сети?)
  • как мы можем получить к нему доступ вне контейнера? Нужно ли мне использовать IP и порт или DNS, я также могу использовать?
  • могу ли я получить доступ к тому же http://mywebapi/WeatherForecast снаружи?

1 Ответ

1 голос
/ 06 августа 2020

В чем причина? (браузер или почтальон не в сети контейнера?)

Да, разрешение DNS выполняется только для внутренней сети, поэтому mywebapi не определен за пределами сети, определенной с помощью docker -compose.

как мы можем получить к нему доступ вне контейнера? Нужно ли мне использовать IP и порт или DNS, я также могу использовать?

Вам необходимо сопоставить порты вашего хост-компьютера с портами, которые выставлены вашими контейнерами (порты, на которых приложение прослушивает). В docker -compose есть раздел, например,

  ...
  ports:
    - "8000:8000"    # maps 8000 port of host to 8000 port inside container
  ...
  ...

после завершения сопоставления портов вы можете use http://localhost:<port>/ получить доступ к сервису извне docker сеть

может Я обращаюсь к тому же http://mywebapi/WeatherForecast снаружи?

Нет, и да, вы можете определить сопоставление для разрешения mywebapi на localhost в /etc/hosts файле (только для * NIX env.)

...