2017-03-03 264 views
1

我有一個node.js應用程序在Azure中作爲App Service運行。它通過mongoose + tunnel-ssh連接到MongoDB。我有多個應用程序服務部署在各種地理位置,一切正常。作爲App Service運行在Azure中的node.js應用程序的臨時插槽爲我提供了EADDRINUSE

當我創建我獲得以下從SSH隧道爲分期例如錯誤的暫存插槽(注:PROD插槽仍然正常工作):

{"code":"EADDRINUSE", "errno":"EADDRINUSE", "syscall":"listen", "address":"127.0.0.1", "port":27017} 

對我來說,似乎上演插槽上運行相同的虛擬機,並嘗試使用相同的端口作爲生產,這就是爲什麼它無法建立到數據庫的連接。這意味着我可能無法擴展應用程序,因爲另一個實例會遇到同樣的問題。

我該如何解決這個問題,用於分段和其他實例(縮放時)?

分期可以使用不同的端口,但如何動態地設置它,所以它也將努力調整後的情況?

回答

0

根據您的錯誤信息,看來你忘記配置MongoDB的連接字符串爲您的插槽的Web App應用程序。

我們可以在Set up staging environments in Azure App Service找到在指令了一句:

部署插槽的實際生活應用與自己的主機名。應用內容和配置元素可以在兩個部署插槽(包括生產插槽)之間交換。

從本質上講,你可以把插槽爲獨立的Web應用程序。因此,請仔細檢查您的應用程序中的應用程序配置。

+0

我做了更多的挖掘 - 我已經隔離了我的網絡應用程序,除了我之外沒有人能夠訪問它。我已經重新啓動了prod和stg插槽,並且我以相同的情況結束了 - prod能夠通過SSH連接到數據庫,而不是stg。當我停止刺激時,stg突然間能夠連接,但是在啓用刺激之後,整個問題都在這個插槽中移動。在我看來,只有一個插槽可以創建和使用ssh隧道(使用端口)。 – Michal

+0

您正在使用哪種mongodb服務?因爲它讓我困惑,你的錯誤信息顯示爲「address」:「127.0.0.1」。目前,您可以爲您的插槽啓用mongodb的不同端口,併爲mongodb連接字符串在不同的插槽中設置不同的應用程序設置,作爲解決方法。 –

+0

它是從Azure託管的Bitnami進行復制的MongoDB。地址是localhost,因爲我創建了一個ssh隧道,將流量轉發到託管Mongo的虛擬機的公共IP。配置應該可以,因爲它適用於一個插槽。問題是第二個不能建立連接。 – Michal

相關問題