2017-10-24 8 views
0

두 개의 Docker 컨테이너가 있습니다.AWS-ECS - 컨테이너 간 통신 - 알 수없는 호스트 오류

  1. TestWeb는 (노출 : 80)
  2. TestAPI을 (노출 : 80)

Testweb 용기 TestApi 용기 부른다. 호스트는 8080 포트에서 TestWeb 컨테이너와 통신 할 수 있습니다. 호스트는 8081을 사용하여 TestApi와 통신 할 수 있습니다.

내 개발 상자 (Windows 10)에서 TestApi를 호출 할 수 있지만 AWS (ECS) 코드를 배포 할 때 얻을 수 있습니다. "알 수없는 호스트"예외입니다. 두 컨테이너 다 잘 작동하고 개별적으로 호출 할 수 있습니다. 내가 내부적으로 컨테이너 2의 방법에 HttpClient를을 사용하여 나머지 호출을하는 방법을 호출 할 때, 그것은 오류를 제공합니다

An error occurred while sending the request. ---> System.Net.Http.CurlException: Couldn't resolve host name.

코드 :

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 주소를 얻습니다. 컨테이너 1의 컨테이너 2에 IP 주소로 ping 할 수 있습니다. 그러나 컨테이너 2 이름을 사용하여 ping을 수행 할 수 없습니다. 그것은 나에게 "알 수없는 호스트"오류를 제공합니다.

답변

0

AWS는 Docker 작성을 사용하지 않고 작업 정의를 추가하기위한 인터페이스를 제공합니다. 함께 통신해야하는 컨테이너를 동일한 태스크 정의에 넣을 수 있습니다. 그런 다음 링크 섹션에서 현재 컨테이너에서 호출 할 컨테이너를 지정할 수도 있습니다. 각 컨테이너는 태스크 정의의 "호스트"섹션에서 컨테이너 이름을 제공받을 수 있습니다. "호스트"필드에 컨테이너 이름을 추가하면 Container1 (TestWeb)이 Container2 (TestAPI)와 통신 할 수있었습니다.