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

时间:2017-03-14 20:40:59

标签: networking docker amazon-ec2 docker-networking 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>

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

  • 我是否需要为我的泊坞主机公开 IP地址
  • 是否有另一种方式与另一台EC2中运行的其他网络服务器中的此类网络服务器进行交互?

如果您有解决方案,请尽可能多地向我解释详细信息。

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

1 个答案:

答案 0 :(得分:2)

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

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

没错,它会产生大量冗余代码和额外的故障点。这就是为什么使用亚马逊的托管泊坞服务(https://aws.amazon.com/ecs/)会更好的原因。这样您就可以启动一个EC2实例,它是一个docker并具有一个公共IP地址。它仍然允许您SSH到您的EC2实例并更改内容。