AWS Beanstalk和Docker端口=这是什么样的tomfoolery?

所以我有一个docker应用程序在端口9000上运行,我希望只通过https访问,而不是http,但我似乎没有任何意识到如何处理端口。 总之,我只想暴露端口443而不是80(在负载平衡器层和实例层),但一直没有能够做到这一点。

所以我的Dockerfile有:

EXPOSE 9000 

和我的Dockerrun.aws.json有:

 { "AWSEBDockerrunVersion": "1", "Ports": [{ "ContainerPort": "9000" }] } 

而我似乎无法通过9000端口访问,而只能访问80端口。

当我ssh进入docker容器正在运行的实例,并用netstat查找端口时,我得到端口80和22以及其他一些udp端口,但没有端口9000.亚马逊如何pipe理这个? 更重要的是用户如何获得预期的行为?

用ssl和https尝试这个也会产生同样的结果。 证书已设置并映射到端口443,我甚至在.ebextensionsconfiguration文件中创build了一个案例来打开实例上的端口443,但仍然没有ssl

  sslSecurityGroupIngress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupName: {Ref : AWSEBSecurityGroup} IpProtocol: tcp ToPort: 443 FromPort: 443 CidrIp: 0.0.0.0/0 

我可以使SSL工作的唯一方法是让负载均衡器使用端口443(SSL)转发到实例端口80(非HTTPS),但这是荒谬的。 我究竟如何打开实例上的ssl端口并将docker设置为使用给定的端口? 有没有人做过这个成功?

我会很感激这方面的帮助 – 我已经梳理了文档,并得到了这一点,但这只是简单的困惑我。 总之,我只想暴露端口443而不是80(在负载平衡器层和实例层),但一直没有能够做到这一点。

祝你有美好的一天

干杯

这是已知的问题,从http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_image.html

您可以指定多个容器端口,但Elastic Beanstalk只使用第一个将容器连接到主机的反向代理并从公共Internet路由请求。

所以,如果您需要多个端口,AWS Elastic Beanstalk可能不是最佳select。 至lessDocker选项。

关于SSL – 我们通过使用专用的nginx实例和proxy_pass到Elastic Beanstalk环境URL来解决它。