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

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

EXPOSE 25 

我还编辑了豆浆负载平衡器(使用EC2的webpipe理员),并添加端口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服务器正在侦听。 如果我使用上述configuration在Elastic Beanstalk中运行容器,则无法使用负载平衡器或直接连接到端口25,也不能直接连接到EC2实例。

任何想法我在这里做错了吗?

不要直接从EC2 web admin编辑Load Balancerconfiguration,build议您使用elasticbeanstalk ebextensions来执行此操作,因为即使自动缩放组中的EC2实例被replace,这些更改也会保留在您的环境中。

你可以尝试以下吗? 在应用程序源文件夹中名为.ebextensions的文件夹中创build一个文件“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创build的默认Load Balancer资源,两个监听器的实例端口都设置为25.希望有帮助。

阅读更多关于使用ebextensions 在这里定制您的环境。 你可以尝试在.ebextensions/01-elb.config目录中的.ebextensions/01-elb.config文件中使用上述文件创build一个新环境吗? 如果遇到任何问题,请告诉我。