AWS-ECS - 容器之间的通信 - 未知主机错误

时间:2017-10-24 20:59:32

标签: rest docker containers amazon-ecs amazon-ecr

我有两个Docker容器。

  1. TestWeb(曝光:80)
  2. TestAPI(曝光:80)
  3. Testweb容器调用TestApi容器。主机可以从端口8080与TestWeb容器通信。主机可以使用8081与TestApi通信。

    我可以让TestWeb在我的开发框中调用TestApi(Windows 10)但是当我将代码部署到AWS(ECS)时,我得到“未知主机”异常。两个容器都工作正常,我可以单独调用它们。但是当我调用一个方法在内部使用HttpClient对一个方法在Container2中进行Rest调用时,它会给出错误:

      

    发送请求时发生错误。 ---> 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地址。我可以使用他们的IP地址从container1 ping容器2。但我无法ping使用container2名称。它给了我“未知主机”错误。

2 个答案:

答案 0 :(得分:0)

AWS不使用Docker撰写,但提供了添加任务定义的界面。 需要一起通信的容器可以放在相同的任务定义中。然后我们还可以在links部分中指定将从当前容器调用的容器。可以在" Host"上为每个容器指定其容器名称。任务定义部分。一旦我将容器名称添加到" Host" field1,Test1(TestWeb)能够与Container2(TestAPI)进行通信。

答案 1 :(得分:0)

它似乎 ECS并未在幕后使用合法的docker-compose,但是其实现确实支持Compose V2“ links”功能。

这是我组成文件的一部分,我刚刚在ECS上运行,它需要相同的功能并且遇到与您相同的“无法解析主机”错误。我添加的“链接”修复了我在Elastic Container Service上的主机名解析问题!

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

这使我的应用服务器可以与databasesocks-proxy主机名进行通信。格式为“ SERVICE:ALIAS”,可以将两者保持默认设置相同。

在您的示例中为:

version: '3'
services:
  testapi:
    links:
      - testweb:testweb
  testweb:
    links:
      - testapi:testapi