在 AWS Fargate 中链接容器
Posted
技术标签:
【中文标题】在 AWS Fargate 中链接容器【英文标题】:Linking Container in AWS Fargate 【发布时间】:2018-05-18 04:01:47 【问题描述】:我尝试在 AWS Fargate 上设置一个小示例,并尝试在其中拥有一个应用程序容器和一个数据库容器。
任务定义启动两个容器,但我的应用程序容器失败并显示getaddrinfo ENOTFOUND db db:3306
。
因此,我的应用容器找不到数据库容器。
由于 Fargate 不允许 Docker 容器的“链接”,我想知道它们如何相互通信。
数据库容器的名称为db
,端口为3306
,我的应用容器配置为使用它。
很遗憾,Fargate 无法定义容器链接,而仅适用于“oldschool”ECS/EC2。
在本地 docker-compose 设置中,它以这种方式工作。
【问题讨论】:
但是您为解决问题所做的更改是什么?根据您接受的答案,您无需更改任何内容。 在我部署的应用程序中,我尝试将数据库引用为“db:3306”。当我部署应用程序和数据库并使用“localhost:3306”(而不是服务名称)引用数据库时,它可以工作。 【参考方案1】:Fargate 任务中的容器共享一个网络命名空间,因此您根本不需要使用链接。您可以简单地通过 localhost 进行通信。
例如,如果您的容器 A 在端口 8000 上运行 Web 服务器,则容器 B 可以通过 curl http://localhost:8000/
访问它
【讨论】:
谢谢,很有用! @Noah 你将如何使用服务 A 和 B 都在内部监听 8080,例如2 个春季启动项目 @toske 您需要将其中一项服务移动到不同的端口。或者,理论上,如果您希望其中一个暴露给 localhost,而另一个暴露给网络,您可以显式地将一个绑定到 127.0.0.1,另一个绑定到不同的地址。 @SangamBelose 您不需要为此在 cloudformation 中指定任何内容。 'awsvpc' 模式,无论是在 ECS 还是 Fargate 中,都意味着共享网络命名空间(例如共享 localhost) 来自 AWS 的更多信息 - aws.amazon.com/blogs/compute/task-networking-in-aws-fargate【参考方案2】:现在您可以使用 AWS Cloud Map 服务发现与 Amazon ECS 的集成https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/networking-connecting-services.html 使用此服务,您将能够通过 DNS 名称调用其他容器
【讨论】:
【参考方案3】:您可能可以进行设置,以便服务可以通过公共 IP 地址相互通信,然后使用 VPC 保护端口,只有服务可以在其上与自己通信。
【讨论】:
以及在构建容器时如何知道公网IP地址?您也许可以通过先分配 EIP,然后将其附加到 Fargate 来做到这一点。我不认为你可以......使用 localhost 更容易!以上是关于在 AWS Fargate 中链接容器的主要内容,如果未能解决你的问题,请参考以下文章