当前位置: 首页 > 面试题库 >

在AWS ECS中的任务定义之间链接容器?

阳长恨
2023-03-14
问题内容

我正在尝试在AWS
ECS中设置一个具有相关数据库的基本Web应用程序。在本地,我将这些设置放在不同的容器中,并且在ECS上,我想有单独的任务定义,以便可以分别缩放这两个任务。

  1. david_mongodb在ECS中成功注册了第一个任务定义。它具有一个命名的容器david_mongodb
  2. 然后,我尝试将第二个任务定义注册为david_web,其中有一个名为的容器,该容器david_web通过链接数据库david_mongodb:db
  3. 当我单击“创建”时,它返回错误:
    Unable to create Task Definition
    

    Linked container ‘david_mongodb:db’ doesn’t exist.

似乎任务定义在其他任务定义中看不到容器名称?我正在考虑将容器david_webdavid_mongodb容器放在同一个任务定义中,但是我不想这样做:这将阻止我分别缩放Web应用程序或数据库。此概述似乎证实了我的体系结构是值得推荐的…

那么,如何链接存在于不同任务定义中的容器?还是有另一种聪明的方式来处理这个问题?


问题答案:

ECS任务定义中的链接类似于Docker链接,并且仅在容器属于同一任务定义的一部分(单个任务定义的一部分的容器一起放置在同一主机上)时起作用。为了在不同任务定义的容器之间进行通信,您需要一种机制来发现容器的位置(主机)以及通信端口。

ECS通过服务功能与Elastic Load
Balancing(应用程序负载平衡器,网络负载平衡器和经典负载平衡器)集成在一起,该功能将在ELB中自动注册任务,并在ELB中适当地注销任务。

ECS还与Route
53自动命名
集成,用于使用ASRV记录基于DNS的服务发现。您服务的任务可以自动输入到DNS记录中或从中删除。

Amazon ECS使用DNS的服务发现 描述了一种不同的方法,其中Lambda函数通过CloudWatch
Events侦听ECS事件流并更新Route 53 DNS记录。
该方法已被上述Route 53自动命名功能所取代。

如果你想避免负载平衡器和DNS,另一种模式可能是一个大使容器(有一个名为样本ECS-
任务的风筝,它使用ECS
API),也可在覆盖网络有兴趣(纺织品有着相当详细的获取他们的解决方案入门指南)。

弥敦道佩克是保持了许多有关ECS不同的主题,包括服务发现的轨道,在这里。



 类似资料:
  • Navigating Programmatically

  • 问题内容: 我必须链接两个容器,以便它们可以互相看到。当然以下… …在第1行失败,因为容器需要启动并运行才能成为链接目标: 创建双向链接的最简单方法是什么? 问题答案: Docker 1.10通过引入高级容器网络很好地解决了这一问题。(详细信息:https : //docs.docker.com/engine/userguide/networking/dockernetworks/) 首先,创建一

  • 在 Fabric 1.1 中存在两种定义 fabfile 中对象为任务的方式: “从 1.1 版本后支持的新”方法需要是 Task 或其子类的实现,and also descends into imported modules to allow building nested namespaces. The “classic” method from 1.0 and earlier conside

  • Docker允许来自多个容器的服务器通过链接和服务发现相互连接。然而,据我所知,这个服务发现是主机本地的。我想实现一个使用其他托管在不同机器上的服务的服务。 在Docker中有几种方法可以解决这个问题,比如CoreOS的< code>jumpers,本质上代理其他机器的主机本地服务,以及一大堆用于管理Docker部署的github项目,这些项目似乎都试图支持这个用例。 鉴于发展速度,很难遵循当前的

  • 只有在使用“旧的”版本1格式时,我才会在容器的/etc/hosts中看到链接。 我有以下基本版本2 docker-compose.yml文件。 当我运行以下命令时: null

  • 我正在尝试创建一个自定义任务/插件(两者都拒绝工作),用于我的gradle构建脚本。 我正在使用groovy插件,希望在单独的文件中声明任务/插件,而不是在我的构建中。格拉德尔。 我的项目树如下所示: 我试图做的是在中创建我的任务/插件类,然后在。 让我举一个小例子。 TestTask。groovy: build.gradle 当我尝试使用我的gradle.build(清洁,构建等)做任何事情时,