2014-07-25 34 views
4

我想運行在彈性魔豆泊塢窗容器中的SMTP服務器,所以在我Dockerfile我已經暴露的端口25(以及任何其他端口)的彈性魔豆泊塢容器上運行非www東西

EXPOSE 25 

我還編輯了魔豆負載均衡器(使用EC2網絡管理員),並添加端口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中運行容器,則無法使用負載平衡器或直接連接到端口25,也不能直接連接到EC2實例。

任何想法我在做什麼錯在這裏?

回答

2

而不是直接從EC2 web admin編輯負載均衡器配置,建議您使用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文件中創建新環境嗎?如果遇到任何問題,請告知我。

+1

即使配置讓我進一步和應用程序正在運行(我已將實例端口更改爲2555,因爲它似乎已被佔用的sendmail),端口似乎無效處理。如果我登錄到實例,我可以看到我的碼頭容器正在運行,但它可以從一個看似隨機的端口(0.0.0.0:12472-> 2555/tcp)訪問,我可以連接到這個12472甚至從外部(如果我修改安全組)但不是2555. – Andris

+1

重新啓動應用程序或上傳新版本將實例端口從12472更改爲其他內容 – Andris

+1

似乎Docker前面的Nginx知道此端口,但由於某種原因將其視爲HTTP這不是。 – Andris