首页 > 解决方案 > 如何让两个托管在 aws 中的 docker 容器进行交谈?

问题描述

当谈到 docker 和 aws 时,我是一个菜鸟,所以我很可能错过了一些微不足道的东西,但我已经在这个问题上停留了很长一段时间。

因此,我在 aws 中托管了三个 docker 容器——contA、contB 和 contC。contA 和 contB 是同一虚拟网络的一部分。contC 是一个独立的容器。contA 是一个正在运行的 koa 服务器,它注册了一堆 api 端点。contB 正在运行 oauth 服务。contC 正在运行 nodejs udp 服务器。我想要做的是从 contC 对 contA 内的端点进行 post 调用。所以在 udp 服务器中,我只是对 'xxx.com/some/endpoint' 进行 fetch post 调用。在尝试测试从 contC 到 contA 的通信是否有效时,我从托管在 aws 中的映像创建了容器,映射了适当的公共和私有端口并启动了容器。但我得到一个错误说

'FetchError: 对 xxx.com/some/endpoint 的请求失败,原因:getaddrinfo ENOTFOUND xxx.com xxx.com:443'

我不希望 contC 成为同一个虚拟网络的一部分。在创建 docker 容器时,我尝试添加从 contC 到 contA 的 --link。但这没有帮助。任何关于如何解决的见解都会非常有帮助。谢谢!

更新 我知道问题出在 contC 的主机名解析上。我可以在 Postman 上访问这些端点。我还可以 ping 其他公共端点。有没有办法配置容器的 /etc/resolv.conf 文件以将 xxx.com 解析为 xxx.xx.xx.xxx ?

标签: restamazon-web-servicesdocker

解决方案


如果我理解正确的问题

你不能。

您正在寻找的是,从 VPC 外部联系 VPC 中的资源。这首先违背了 VPC 的目的。正确的!

为了在非 VPC 容器和 VPC 容器之间建立通信,您可以在两者之间借助 API Gateway。

这可能会让您很
开心 Amazon API Gateway 支持端点与私有 VPC 的集成

您现在可以在您的 Amazon Virtual Private Cloud (VPC) 中提供对 HTTP(S) 资源的访问,而无需将它们直接暴露给公共 Internet。

要不然

将这些端点公开,以便非 VPC 容器可以访问它们。

调试
您能否从您的笔记本电脑(公共互联网)访问那些受 VPC 保护的端点,
如果是,那么您的非 VPC 容器应该能够做同样的事情
如果不是,那么一个糟糕的非 VPC 容器如何能够使用这些端点:(


错误:getaddrinfo ENOTFOUND

另外,看看这个SO question,处理相同的错误
所以 DNS 无法解析 URL(因为,VPC 屏蔽岩石)

URL 格式错误


推荐阅读