rest - 如何让两个托管在 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 ?
解决方案
如果我理解正确的问题
你不能。
您正在寻找的是,从 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 格式错误
推荐阅读
- python - 如何将此元组更改为另一个全字元组?
- node.js - Discord.JS 斜线命令 15 分钟后 Webhook 令牌无效
- javascript - Angular Material Table-如何保存数据?
- jquery - 如何检查 WooCommerce jquery found_variation 事件中是否存在属性
- python - CodeDeploy 失败并出现错误 Errno::ENOEXEC 并显示消息 Exec 格式错误
- matlab - 如何从 Matlab 中的 .ply 文件中提取 rgb 图像
- c++ - 如何找到只包含某个字段而没有其他字段的列表?
- javascript - 图像编辑无法使用 PHP 和 Javascript/Jquery
- jquery - AJAX函数调用在函数执行后不向变量添加数据
- javascript - 使用“npm start”运行 JHipster 生成的前端时出现“未知选项”错误