在 AWS Fargate 中链接容器
Linking Container in AWS Fargate
我尝试在 AWS Fargate 上设置一个小示例,并尝试让一个应用程序容器和一个数据库容器在那里。
任务定义启动了两个容器,但我的应用程序容器因 getaddrinfo ENOTFOUND db db:3306
而失败。
因此,我的应用程序容器无法找到数据库容器。
由于 Fargate 不允许 "links" 个 Docker 个容器,我想知道它们如何相互通信。
数据库容器的名称为 db
,端口为 3306
,我的应用程序容器配置为使用此名称。
不幸的是,定义容器的链接不适用于 Fargate,但仅适用于 "oldschool" ECS/EC2。
在本地 docker-compose 设置中,它是这样工作的。
您或许可以设置它,以便服务可以通过 public IP 地址相互通信,然后使用 VPC 保护端口,只有服务可以在上面与自己通信。
Fargate 任务中的容器共享一个网络命名空间,因此您根本不需要使用链接。您可以简单地通过本地主机进行通信。
例如,如果您有容器 A 运行 端口 8000 上的 Web 服务器,容器 B 可以通过 curl http://localhost:8000/
访问它
现在您可以使用 AWS Cloud Map 服务发现与 Amazon ECS 的集成 https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/networking-connecting-services.html
使用此服务,您将能够通过 DNS 名称调用其他容器
我尝试在 AWS Fargate 上设置一个小示例,并尝试让一个应用程序容器和一个数据库容器在那里。
任务定义启动了两个容器,但我的应用程序容器因 getaddrinfo ENOTFOUND db db:3306
而失败。
因此,我的应用程序容器无法找到数据库容器。
由于 Fargate 不允许 "links" 个 Docker 个容器,我想知道它们如何相互通信。
数据库容器的名称为 db
,端口为 3306
,我的应用程序容器配置为使用此名称。
不幸的是,定义容器的链接不适用于 Fargate,但仅适用于 "oldschool" ECS/EC2。
在本地 docker-compose 设置中,它是这样工作的。
您或许可以设置它,以便服务可以通过 public IP 地址相互通信,然后使用 VPC 保护端口,只有服务可以在上面与自己通信。
Fargate 任务中的容器共享一个网络命名空间,因此您根本不需要使用链接。您可以简单地通过本地主机进行通信。
例如,如果您有容器 A 运行 端口 8000 上的 Web 服务器,容器 B 可以通过 curl http://localhost:8000/
现在您可以使用 AWS Cloud Map 服务发现与 Amazon ECS 的集成 https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/networking-connecting-services.html 使用此服务,您将能够通过 DNS 名称调用其他容器