AWS-ECS - Обмен данными между контейнерами - Неизвестная ошибка хоста

У меня два контейнера Docker.

  1. TestWeb (Разоблачение: 80)
  2. TestAPI (выставлено: 80)

Контейнер Testweb вызывает контейнер TestApi. Хост может связываться с контейнером TestWeb через порт 8080. Хост может связываться с TestApi, используя 8081.

Я могу заставить TestWeb вызывать TestApi в моем окне разработчика (Windows 10), но когда я развертываю код в AWS (ECS), я получаю исключение «неизвестный хост». Оба контейнера работают нормально, и я могу вызывать их по отдельности. Но когда я вызываю метод, который внутренне выполняет вызов Rest с использованием HttpClient для метода в Container2, он выдает ошибку:

Произошла ошибка при отправке запроса. ---> System.Net.Http.CurlException: не удалось разрешить имя хоста.

Код:

using (var client = new HttpClient())
        {
            try
            {
                string url = "http://testapi/api/Tenant/?i=" + id;
                var response = client.GetAsync(url).Result;
                if (response.IsSuccessStatusCode)
                {
                    var responseContent = response.Content;
                    string responseString = responseContent.ReadAsStringAsync().Result;
                    return responseString;
                }
                return response.StatusCode.ToString();
            }
            catch (HttpRequestException httpRequestException)
            {
                return httpRequestException.Message;
            }
}

Вот что я пробовал:

Два контейнера (TestWeb, TestAPI) находятся в одном определении задачи в AWS ECS. Когда я проверяю контейнеры, я получаю IP-адрес каждого из контейнеров. Я могу пинговать container2 из контейнера1 с их IP-адресом. Но я не могу пинговать, используя имя контейнера2. Это дает мне ошибку "неизвестный хост".


person Raghav    schedule 24.10.2017    source источник


Ответы (2)


Кажется, что ECS не использует законные docker-compose под капотом, однако их реализация поддерживает Compose V2 "links".

Вот часть моего файла набора, который я только что запустил на ECS, который нуждался в той же функциональности И имел ту же ошибку «не удалось разрешить хост», которую вы получали. Добавленные мной «ссылки» исправили проблему с разрешением имени хоста в Elastic Container Service!

version: '3'
services:
  appserver:
    links:
      - database:database
      - socks-proxy:socks-proxy

Это позволило моему серверу приложений связываться с именами узлов database и socks-proxy. Формат - «СЕРВИС: АЛИАС», и их можно оставить такими же, как по умолчанию.

В вашем примере это будет:

version: '3'
services:
  testapi:
    links:
      - testweb:testweb
  testweb:
    links:
      - testapi:testapi
person Elijah Lynn    schedule 13.02.2019

AWS не использует Docker compose, но предоставляет интерфейс для добавления определений задач. Контейнеры, которые должны взаимодействовать друг с другом, могут быть помещены в одно определение задачи. Затем мы также можем указать в разделе ссылок контейнеры, которые будут вызываться из текущего контейнера. Каждому контейнеру можно присвоить имя контейнера в разделе «Хост» определения задачи. Как только я добавил имя контейнера в поле «Хост», Container1 (TestWeb) смог связаться с Container2 (TestAPI).

person Raghav    schedule 01.11.2017