2016-07-31 98 views
0

我們的基礎設施使用Docker容器來分隔我們的服務。我開始設立我們的碼頭撰寫組織來協助本地發展。Docker Compose:允許圖像訪問主機資源(如postgresql)

我們的一些服務使用Ruby on Rails框架,並且本地開發通過在本地運行服務器和數據庫(傳統的Rails開發)進行本地開發。

爲了更貼近地模仿生產環境,docker-compose會很有用。我們的數據庫不是短暫的(他們是否曾經:P),因此我們不會將它們作爲碼頭集裝箱運行。

鑑於此,如何構建我的docker-compose以允許Rails容器連接到主機的數據庫(PostgreSQL在這種情況下)?本地數據庫中有很多數據可用於對應用程序進行煙霧測試。

+1

數據庫經常在容器中運行,數據只是存儲在卷中以進行持久化。 – BMitch

回答

0

我想你不想手動訪問server容器內的主機IP地址。

什麼可以用的是extra_hosts和出口的主機IP地址作爲環境變量:

service: 
    image: alpine:3.4 
    extra_hosts: 
    - "host:${HOST_IP}" 
    command: cat /etc/hosts 

不幸的是docker-compose不支持像"host:$(ip -4 addr show ...)"。 因此,爲了達到這個目的,每個開發者都必須編輯他們的.bashrc(或者他們正在使用的任何東西)。

在我的機器這給了我正確的本地IP地址:

ip -4 addr show|grep brd|egrep -o 'inet ([0-9]+\.){3}[0-9]+'|cut -d ' ' -f2 

替代

或者你可以只配置數據庫的docker0接口進行監聽以及和編輯您的docker-compose.yml看起來像這樣:

service: 
    image: alpine:3.4 
    extra_hosts: 
    - "host:172.17.0.1" 
    command: cat /etc/hosts 
0

最好的辦法做到這一點窩是要在容器中運行數據庫。

數據庫不是臨時的,因此我們不會將它們作爲碼頭容器運行。

此聲明不正確。您可以在Docker容器中運行數據庫。只要確保您使用卷將數據存儲在主機上衆所周知的目錄中即可。這樣,如果數據庫停止,它將用相同的數據恢復。

將數據庫存放在容器中後,可以很容易地從其他容器連接到該容器。

相關問題