2017-11-11 228 views
0

我正在運行一個nodejs應用程序以及一個PostgreSQL數據庫。目前,我藉助以下環境變量從nodejs連接到數據庫:POSTGRESQL_HOST,POSTGRESQL_USER,POSTGRESQL_PASSWORDPOSTGRESQL_PORTPOSTGRESQL_USERPOSTGRESQL_PASSWORD被映射到正確的「祕密」。端口是靜態的,所以它永遠不會改變。我的問題是與主機。目前,我手動輸入了POSTGRESQL_HOST中的PostgreSQL窗格的IP地址,但每次實例重新部署時都會更改。連接到數據庫的正確方法是什麼?在Openshift中連接數據庫的正確方法是什麼?

回答

3

在部署配置的環境變量中設置POSTGRESQL_HOST時,請將其設置爲PostgreSQL數據庫服務的名稱,而不是IP。該服務的名稱作爲內部DNS服務器中的主機名添加,並映射到適當的IP。所以當服務名稱用作主機名時,事情會自動解決。

FWIW,我會親自避免使用自動添加的環境變量。無論如何,這些名稱的前綴是服務的名稱(大寫),因此您已經將其綁定到服務名稱的知識上。最好在部署配置中使用環境變量而不是硬連線到代碼中。自動添加的環境變量的另一個問題是,如果數據庫是在前端之後創建的,那麼它們最初不會被設置。所以最好避免它們。他們是在Docker中連接容器的遺產,他們從來就不是一種很好的做事方式。

0

如果您從吊艙的終端檢查您的環境,請撥打printenv,您應該看到automatically added variables。因此,假設您的Postgres服務被稱爲POSTGRES,則可以使用環境變量POSTGRES_SERVICE_HOST來訪問您的數據庫。

+0

在這種情況下,我需要在我的nodejs應用程序代碼中擁有'POSTGRES_SERVICE_HOST',而不是原來的'POSTGRESQL_HOST'吧?你知道是否可以將一個環境變量的值設置爲另一個?例如,'POSTGRESQL_HOST' ='$ POSTGRES_SERVICE_HOST'? – pranavashok

+0

如果你想繼續使用'POSTGRESQL_HOST',Graham的答案是正確的選擇。 –

相關問題