如何将请求发送到在外部世界中的AWS EC2机器内的Docker容器内运行的Web服务器?

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

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

如何从外部世界向这个Web服务器发送请求(GET,POST) ? 例如从另一个EC2机器上运行的另一个Web服务器。 甚至从网上使用我的networking浏览器?

  • 我需要为我的docker主机获取公共IP地址吗?
  • 在另一个EC2中运行的另一个Web服务器中,是否有另一种方式与这种Web服务器交互?

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

我能想到的唯一方法是在主EC2上编写一个Web服务器来监听这些请求,并将它们转发给相应的Docker容器Web服务器? 但是那将会是冗余代码太多,我宁愿直接向容器上运行的Web服务器请求!

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

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

这是正确的,它会产生大量的冗余代码和额外的故障点。 这就是为什么使用Amazon的托pipe服务( https://aws.amazon.com/ecs/ )更好一些。 这样你就可以启动一个Docker的EC2实例,并且有一个公共IP地址。 它仍然允许你SSH到你的EC2实例,并改变东西。