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

Rest AWS-ECS-容器之间的通信-未知主机错误,rest,docker,containers,amazon-ecs,amazon-ecr,Rest,Docker,Containers,Amazon Ecs,Amazon Ecr,我有两个码头集装箱 TestWeb(公开:80) TestAPI(曝光:80) Testweb容器调用TestApi容器。主机可以从端口8080与TestWeb容器通信。主机可以使用8081与TestApi通信 我可以让TestWeb在我的dev box(Windows 10)中调用TestApi,但当我将代码部署到AWS(ECS)时,会出现“未知主机”异常。这两个容器都很好用,我可以单独给它们打电话。但是,当我调用一个使用HttpClient在内部对Container2中的方法进行Rest调用

我有两个码头集装箱

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

    我可以让TestWeb在我的dev box(Windows 10)中调用TestApi,但当我将代码部署到AWS(ECS)时,会出现“未知主机”异常。这两个容器都很好用,我可以单独给它们打电话。但是,当我调用一个使用HttpClient在内部对Container2中的方法进行Rest调用的方法时,它会给出错误:

    发送请求时出错。-->System.Net.Http.Exception:无法解析主机名

    代码:

    以下是我尝试过的事情:


    这两个容器(TestWeb、TestAPI)在AWS ECS中位于相同的任务定义中。当我检查容器时,我会得到每个容器的IP地址。我可以用他们的IP地址从container1 ping container2。但是我不能用container2的名字ping。它给出了“未知主机”错误。

    AWS不使用Docker compose,但提供了添加任务定义的接口。 需要一起通信的容器可以放在同一个任务定义上。然后,我们还可以在links部分指定将从当前容器调用的容器。可以在任务定义的“主机”部分为每个容器指定其容器名称。一旦我将容器名称添加到“主机”字段中,Container1(TestWeb)就能够与Container2(TestAPI)通信。

    ECS似乎不在后台使用合法的docker compose,但是,它们的实现确实支持compose V2”功能

    这是我刚刚在ECS上运行的撰写文件的一部分,它需要相同的功能,并且出现了与您相同的“无法解析主机”错误。我添加的“链接”修复了弹性容器服务上的主机名解析问题

    version: '3'
    services:
      appserver:
        links:
          - database:database
          - socks-proxy:socks-proxy
    
    这允许我的appserver与
    数据库
    socks代理
    主机名通信。格式为“SERVICE:ALIAS”,可以将它们保持为默认做法

    在您的示例中,它将是:

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