我想在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文件中的上述文件创建新环境吗?如果您遇到任何问题,请告诉我.