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

Jos*_*osh 8 ssl amazon-web-services docker amazon-elastic-beanstalk

所以我有一个在端口9000上运行的docker应用程序,我想只通过https而不是http来访问它,但是我似乎并没有理解亚马逊如何处理端口.简而言之,我只想暴露端口443而不是80(在负载平衡器层和实例层上),但是无法做到这一点.

所以我的Dockerfile有:

EXPOSE 9000
Run Code Online (Sandbox Code Playgroud)

我的Dockerrun.aws.json有:

{
   "AWSEBDockerrunVersion": "1",
   "Ports": [{
      "ContainerPort": "9000"
    }]
}
Run Code Online (Sandbox Code Playgroud)

我似乎无法通过端口9000访问东西,但只能访问80.

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

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

    sslSecurityGroupIngress:
      Type: AWS::EC2::SecurityGroupIngress
      Properties:
        GroupName: {Ref : AWSEBSecurityGroup}
        IpProtocol: tcp
        ToPort: 443
        FromPort: 443
        CidrIp: 0.0.0.0/0
Run Code Online (Sandbox Code Playgroud)

我可以让SSL工作的唯一方法是让Load Balancer使用端口443(ssl)转发到实例端口80(非https),但这很荒谬.我如何在实例上打开ssl端口并设置docker以使用给定的端口?有没有人成功地做过这件事?

我对这方面的任何帮助表示感谢 - 我已经仔细研究了这些文档,并将其与此相提并论,但这简直让我感到困惑.简而言之,我只想暴露端口443而不是80(在负载平衡器层和实例层上),但是无法做到这一点.

祝你有美好的一天

干杯

sap*_*ens 5

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

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

因此,如果您需要多个端口,AWS Elastic Beanstalk可能不是最佳选择.至少Docker选项.

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