42

我尝试在 AWS Fargate 上设置一个小示例,并尝试在其中拥有一个应用程序容器和一个数据库容器。

任务定义启动两个容器,但我的应用程序容器失败并显示getaddrinfo ENOTFOUND db db:3306. 因此,我的应用容器找不到数据库容器。

由于 Fargate 不允许 Docker 容器的“链接”,我想知道它们如何相互通信。数据库容器的名称db带有端口3306,我的应用程序容器配置为使用它。

不幸的是,Fargate 无法定义容器链接,而仅适用于“老式”ECS/EC2。

在本地 docker-compose 设置中,它以这种方式工作。

4

3 回答 3

67

Fargate 任务中的容器共享一个网络命名空间,因此您根本不需要使用链接。您可以简单地通过 localhost 进行通信。

例如,如果容器 A 在端口 8000 上运行 Web 服务器,则容器 B 可以通过curl http://localhost:8000/

于 2017-12-19T20:59:27.527 回答
2

现在您可以使用 AWS Cloud Map 服务发现与 Amazon ECS 的集成https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/networking-connecting-services.html 使用此服务,您将能够通过以下方式调用其他容器DNS 名称

于 2021-09-26T10:06:38.083 回答
-3

您可能可以对其进行设置,以便服务可以通过公共 IP 地址相互通信,然后使用 VPC 保护端口,只有服务可以在其上进行通信。

于 2017-12-19T17:55:23.493 回答