networking - 如何从外部世界向 AWS EC2 机器内的 docker 容器内运行的 Web 服务器发送请求?

标签 networking docker amazon-ec2 docker-network docker-container

我有一个在 AWS EC2 Ubuntu 计算机中运行的 docker 容器内运行的 Python Flask Web 服务器。容器在默认网络设置 (docker0) 上运行。在主机 EC2 中,我可以使用主机的 docker-machine ip (172.x.x.x) 和转发端口 (3000: 3000) 向此 Web 服务器发送请求(Get、Post)。

url: http:// 172.x.x.x:3000 / <api address>

如何从外部世界向此网络服务器发送请求(GET、POST)?例如,来自在另一台 EC2 计算机上运行的另一台 Web 服务器。或者甚至使用我的网络浏览器从网络上访问?

  • 我需要为我的 Docker 主机获取公共(public)IP 地址吗?
  • 是否有另一种方式可以在另一个 EC2 中运行的另一个 Web 服务器内与此类 Web 服务器进行交互?

如果您有解决方案,请尽可能详细地解释,以便我理解。

我能想到的唯一方法是在主 EC2 上编写一个 Web 服务器来监听请求并将其转发到适当的 docker 容器 Web 服务器?!但这会导致太多冗余代码,我宁愿直接向容器上运行的 Web 服务器请求!

最佳答案

docker的IP地址不公开。不过,您的 EC2 实例通常有一个公共(public) IP 地址。您需要一个代理监听 EC2 实例上的端口并将其传递到 docker/Flask 服务器。然后您就可以使用 ec2-instance-ip:agent-port 从外部调用它。

这仍然不是一个长期解决方案,因为 EC2 IP 在停止时会发生变化。如果您希望 IP/端口可靠,最好使用负载均衡器或弹性 IP。

没错,它会产生大量冗余代码和额外的故障点。这就是为什么最好使用 Amazon 的托管 docker 服务 ( https://aws.amazon.com/ecs/ )。这样,您只需启动一个 EC2 实例,它是一个 docker 并具有公共(public) IP 地址。它仍然允许您通过 SSH 访问 EC2 实例并进行更改。

关于networking - 如何从外部世界向 AWS EC2 机器内的 docker 容器内运行的 Web 服务器发送请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42796152/

相关文章:

java - EC2 上 Openfire 服务器的不可靠行为

wordpress - 建立数据库连接 Amazon EC2 时出错 - 移动我的 wordpress 博客后

c - C 的网络库

networking - 使用lua读取pcap文件

docker - 在 docker 镜像中安装 sdkman

docker - 如何从 Docker 镜像中排除应用程序设置(并将它们添加到容器中)?

heroku - 使用 NGINX 服务器从 Amazon Linux AMI 2013.09.2 实例部署 Meteor 应用程序接收模块错误

java - 此流相关代码的 C# 等效项 (Java)

linux - 除 iptables 外的数据包处理实用程序?

docker - 在 Docker 容器中使用 VNCserver + GUI 应用程序 + 虚拟显示