【问题标题】:How can I expose docker containers internally to each other with AWS CloudFormation?如何使用 AWS CloudFormation 在内部相互公开 docker 容器?
【发布时间】:2020-07-13 01:42:15
【问题描述】:

我是 AWS 菜鸟。我有一个 web 服务器容器和一个 selenium hub 容器。我的网络服务器需要访问另一个容器;我可以使用 docker-compose 在开发环境中执行此操作(默认情况下,容器按名称相互公开)。 我对如何使用 AWS CloudFormation 执行此操作感到困惑。 有"links" parameter in the ContainerDefinition,但我认为这使用了旧版 docker 链接参数。所以我舍不得用。

有什么推荐吗?

P.S:我不想公开 selenium 实例,因此不能使用公共主机名/IP。

【问题讨论】:

  • 您如何运行这些容器(EKS、ECS、直接在 EC2 实例上、Fargate)?
  • @DavidMaze 我正在使用 ECR,LaunchType:FARGATE。编辑:“networkMode”:“awsvpc”。
  • 您是否尝试过创建安全组并在每个容器的任务定义中指定相同的安全组?

标签: amazon-web-services docker selenium amazon-cloudformation


【解决方案1】:

虽然links 参数在纯 Docker 世界中是遗留,但它仍然是 AWS ECS 世界中连接容器的最简单方法无需依赖专门的服务发现(例如ConsulRoute 53)。

使用links 的最大警告是循环链接是不可能的。此外,容器必须运行在相同的任务/服务中。 links 参数不适用于多个任务/服务。

【讨论】:

【解决方案2】:

好的,我解决了我的问题。 我关注了这个blog

并将 2 个紧密耦合的容器放入同一个任务定义中,我只能访问另一个容器,例如:localhost:port。

一切正常。

对于面临同样问题的其他人;如果您的容器没有紧密耦合,并且有一天您可能需要将它们部署在不同的机器上,那么此解决方案可能不是最适合您的解决方案。

但对我来说这很好。

【讨论】:

    【解决方案3】:

    创建一个private DNS namespace 并通过DnsConfig 在此命名空间中注册您的服务。这将使您的服务可通过提供为Name 的域名进行寻址。 我们使用Type: A, TTL: 10 作为DnsRecords 配置。

    【讨论】:

      猜你喜欢
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      相关资源
      最近更新 更多