在Elastic Beanstalk Docker容器上运行非www内容

时间:2014-07-25 14:21:19

标签: smtp docker elastic-beanstalk

我想在Elastic Beanstalk中的Docker容器上运行SMTP服务器,所以在我的Dockerfile中我暴露了端口25(没有其他端口)

EXPOSE 25

我还编辑了beanstalk负载均衡器(使用EC2 web admin)并向其添加了端口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。

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

1 个答案:

答案 0 :(得分:2)

建议您不要直接从EC2 Web管理员编辑Load Balancer配置,而是使用elasticbeanstalk ebextensions执行此操作,因为即使您的自动缩放组中的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创建的默认Load Balancer资源,其中两个侦听器的实例端口都设置为25.希望有所帮助。

详细了解如何使用ebextensions here自定义您的环境。 您可以尝试使用appsource目录中的.ebextensions/01-elb.config文件中的上述文件创建新环境吗?如果您遇到任何问题,请告诉我。