我想在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。
我在这里做错了什么想法?
答案 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
文件中的上述文件创建新环境吗?如果您遇到任何问题,请告诉我。