2016-07-31 4 views
0

Unsere Infrastruktur nutzt Docker-Container, um unsere Dienste zu trennen. Ich fange an, unseren Docker-Compose einzurichten, um bei der lokalen Entwicklung zu helfen.Docker Compose: Ermöglicht Bildern den Zugriff auf Hostressourcen (wie postgresql)

Einige unserer Dienste verwenden das Ruby-on-Rails-Framework und die lokale Entwicklung erfolgt am schnellsten, indem der Server und die Datenbank lokal ausgeführt werden (traditionelle Rails-Entwicklung).

Um die Produktionsumgebung genauer nachzuahmen, wäre docker-compose nützlich. Unsere Datenbank ist nicht ephemer (sind sie jemals: P) und daher führen wir sie nicht als Docker Container.

Gegeben, Wie kann ich mein docker-compose erstellen, damit der Rails-Container eine Verbindung zur Host-Datenbank herstellen kann (Postgresql in diesem Fall)? In der lokalen Datenbank befinden sich viele Daten, die für die Rauchprüfung der Anwendung nützlich wären.

+1

Datenbanken werden häufig in Containern ausgeführt, die Daten werden einfach in einem Volume für die Persistenz gespeichert. – BMitch

Antwort

0

Ich denke, Sie möchten nicht manuell auf die IP-Adresse des Hosts innerhalb des server Containers zugreifen.

Was können Sie verwenden, ist extra_hosts und exportieren Sie die Hosts IP-Adresse als Umgebungsvariable:

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

Leider docker-compose nicht so etwas wie "host:$(ip -4 addr show ...)" unterstützt. Damit dies funktioniert, muss jeder Entwickler seine .bashrc (oder was auch immer sie verwenden) bearbeiten.

Auf meinem Rechner gibt mir die korrekte lokale IP-Adresse:

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

Alternative:

Oder Sie könnten nur die Datenbank konfigurieren als auch auf der docker0 Schnittstelle hören und bearbeiten Sie Ihre docker-compose.yml wie folgt aussehen:

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

Der beste Weg, dies zu tun wo Sollen Sie die Datenbank in einem Container ausführen.

Datenbank ist nicht ephemer und daher führen wir sie nicht als Docker Container.

Diese Aussage ist falsch. Sie können eine Datenbank in einem Docker-Container ausführen. Stellen Sie nur sicher, dass Sie ein Volume verwenden, um die Daten in einem bekannten Verzeichnis auf dem Host zu speichern. Auf diese Weise wird die Datenbank mit den gleichen Daten wiederhergestellt, wenn sie gestoppt wird.

Sobald Sie die Datenbank in einem Container haben, ist es sehr einfach, sich von anderen Containern aus zu verbinden.