【问题标题】:Running non-www stuff on an Elastic Beanstalk Docker container在 Elastic Beanstalk Docker 容器上运行非 www 的东西
【发布时间】:2014-09-17 10:31:42
【问题描述】:

我想在 Elastic Beanstalk 中的 Docker 容器上运行 SMTP 服务器,所以在我的 Dockerfile 中我已经公开了端口 25(并且没有其他端口)

EXPOSE 25

我还编辑了 beanstalk 负载均衡器(使用 EC2 网络管理员)并向其添加了端口 25:

| LB Protocol | LB Port | Instance Protocol | Instance Port | SSL |
|    TCP      |   25    |        TCP        |        25     | N/A |
....

并编辑实例的安全组以允许入站 TCP 流量到端口 25(允许所有位置能够直接连接到实例)。

但似乎不起作用。如果我在 Virtualbox 中使用相同的 Dockerfile(使用选项-p 25:25),我可以通过主机连接到端口 25,并且 SMTP 服务器正在侦听。如果我使用前面提到的配置在 Elastic Beanstalk 中运行容器,我无法使用负载均衡器或直接使用 EC2 实例连接到端口 25。

有什么想法我在这里做错了吗?

【问题讨论】:

    标签: smtp docker amazon-elastic-beanstalk


    【解决方案1】:

    建议您使用 elasticbeanstalk ebextensions 而不是直接从 EC2 Web 管理员编辑负载均衡器配置,因为即使替换自动扩展组中的 EC2 实例,这些更改也会在您的环境中持续存在。

    您可以尝试以下方法吗? 在您的应用源中名为.ebextensions 的文件夹中创建一个文件“01-elb.config”,内容如下:

    option_settings:
        - namespace: aws:cloudformation:template:parameter
          option_name: InstancePort
          value: 25
    
    Resources:
        AWSEBLoadBalancer:
            Type: AWS::ElasticLoadBalancing::LoadBalancer
            Properties:
                Listeners:
                    - InstancePort: 25
                      LoadBalancerPort: 80
                      Protocol: TCP
                    - InstancePort: 25
                      LoadBalancerPort: 25
                      Protocol: TCP
                AvailabilityZones:
                    - us-west-2a
                      us-west-2b
                      us-west-2c
                HealthCheck:
                    Timeout: 5
                    Target: TCP:25
                    Interval: 30
                    HealthyThreshold: 3
                    UnhealthyThreshold: 5
    

    此文件为 YAML 格式,因此缩进很重要。 选项设置 ('aws:cloudformation:template:parameter', 'InstancePort') 将实例端口设置为 25,并修改安全组以确保负载均衡器可以访问端口 25。

    此文件将覆盖由 Elastic Beanstalk 创建的默认负载均衡器资源,其中两个侦听器都将实例端口设置为 25。希望对您有所帮助。

    阅读有关使用 ebextensions here 自定义环境的更多信息。 您可以尝试使用appsource目录中.ebextensions/01-elb.config文件中的上述文件创建一个新环境吗?如果您遇到任何问题,请告诉我。

    【讨论】:

    • 即使配置让我更进一步并且应用程序现在正在运行(我将实例端口更改为 2555,尽管似乎 25 已被 sendmail 占用),端口似乎被无效处理。如果我登录到实例,我可以看到我的 docker 容器正在运行,但是可以从一个看似随机的端口 (0.0.0.0:12472->2555/tcp) 访问它,我甚至可以从外部连接到这个 12472(如果我修改了安全组)但不是 2555。
    • 重启应用或上传新版本会将实例端口从 12472 更改为其他端口
    • Docker 前面的 Nginx 似乎知道这个端口,但由于某种原因将其视为 HTTP 而不是。
    • 问题似乎在于 nginx 作为 Docker 前面的反向代理,只能代理 HTTP :S forums.aws.amazon.com/message.jspa?messageID=558590#559061
    猜你喜欢
    • 2015-06-29
    • 2018-06-20
    • 2017-10-14
    • 2015-03-31
    • 2017-07-26
    • 2019-10-09
    • 2015-04-26
    • 2015-06-05
    • 2018-12-05
    相关资源
    最近更新 更多