我有一个在Flask容器中运行的Python Flask Web服务器,该容器在AWS EC2 Ubuntu计算机中运行。容器在默认网络设置(docker0)上运行。在主机EC2中,我可以使用docker-machine ip(172.x.x.x)和主机的转发端口(3000:3000)向该Web服务器发送请求(获取,发布)。
url: http:// 172.x.x.x:3000 / <api address>
如何从外界向该Web服务器发送(GET,POST)请求?例如,从另一台EC2计算机上运行的另一台Web服务器。甚至使用我的网络浏览器从网络上?
如果您有解决方案,请尽我所能详细解释。
我能想到的唯一方法是在主EC2上编写一个Web服务器,以侦听请求并将它们转发到适当的Docker容器Web服务器?但这将是太多的冗余代码,我宁愿只是直接请求在容器上运行的Web服务器!
最佳答案
docker 的IP地址不是公共(public)的。但是,您的EC2实例通常具有公共(public)IP地址。您需要一个代理在您的EC2实例上的端口上侦听并将其传递到您的Docker / Flask服务器。然后,您可以使用ec2-instance-ip:agent-port从外部调用它。
这仍然不是一个长期解决方案,因为EC2 IP在停止时会发生变化。如果希望ip /端口可靠,则最好使用负载平衡器或 flex IP。
没错,它产生了大量冗余代码和一个额外的故障点。这就是为什么最好使用Amazon的托管docker服务(https://aws.amazon.com/ecs/)。这样,您只需启动一个EC2实例即可,该实例是docker并具有公共(public)IP地址。它仍然允许您通过SSH进入EC2实例并进行更改。