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

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

EXPOSE 25

我还编辑了beanstalk负载均衡器(使用EC2 Web管理员)并向其添加了端口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.

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

最佳答案 建议您使用elasticbeanstalk ebextensions直接从EC2 Web管理员编辑Load Balancer配置,因为即使您更换了自动缩放组中的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文件中的上述文件创建新环境吗?如果您遇到任何问题,请告诉我.

点赞