2017-06-17 6 views
1

Insgesamt: Ich nicht meine django app auf einem Docker Container als meine db verlassen wollen. Mit anderen Worten, wenn ich ein Bild laufenDocker: Wie verlässt man sich auf eine lokale Datenbank und nicht auf einen db-Docker-Container?

docker run -p 8000:8000 -d imagename

Ich möchte dies zu meinem lokalen db zu verbinden wissen. Ich habe meine settings.py auf eine pg db verbinden konfiguriert, so ist alles in Ordnung, wenn ich so etwas tun

python manage.py runserver

Fühlen Sie sich frei jede falsche Verwendung bestimmter Begriffe zu rufen oder einfach nur mein allgemeines Verständnis Docker. Aus allen Tutorials, die ich gesehen habe, machen sie normalerweise eine Docker-Datei, die auf ein DB-Image angewiesen ist, das in einem separaten Container aus der Web-App herausgesponnen wird. Beispiele für Dinge, die mich durchgemacht: https://docs.docker.com/compose/django/#connect-the-database, http://ruddra.com/2016/08/14/docker-django-nginx-postgres/ usw. An diesem Punkt ist extrem bin verloren, denn ich weiß nicht, ob ich dies tue in meinem Dockerfile, settings.py in meinem Projekt, oder Docker-compose .yml (Ich vermute, ich sollte das nicht einmal haben, da dies für eine Multi-Container-App ist, die ich vermeiden möchte). [Abschließend: Kann man endlich eine Django-App auf Sellerie & rabbitmq in nur einem Container laufen lassen? Wie bei meinem Beispiel sehe ich nur Fälle, in denen sie alle in getrennten Containern sind.] Was meine Dockerfile betrifft, ist es ziemlich genau das.

FROM python:3 
ENV APP 'http://githubproj` 
RUN git clone $APP \ 
&& cd $APP/projectitself \ 
&& pip install -r requirements.txt 
CMD cd $APP_DIR/mydjangoproject && gunicorn mydjangoproject.wsgi:application --bind 0.0.0.0:8000 
+1

Die DB ist auf Ihrem Docker-Host oder einem Remote-Computer? – johnharris85

+0

@johnharris85.Im Moment versuche ich, es auf meinem eigenen lokalen Rechner zu tun - aber das letztendliche Ziel ist es, auf einen entfernten Rechner zuzugreifen, der die db hosten wird. Nach meinem Verständnis werde ich keinen Container haben, auf dem ein Postgres-Image läuft. – chris123

Antwort

0

Um Ihre containerisierter Django Anwendung auf eine lokale Datenbank ausgeführt wird in dem Host-Computer zu verbinden, um zu ermöglichen, müssen Sie eingehende Verbindungen von Ihrer Docker-Schnittstelle ermöglichen. Sie tun das in Ihrem iptables, indem Sie die folgende Regel in Ihrem lokalen Rechner: Postgres-Server

$ sudo iptables -A INPUT -i docker0 -j ACCEPT 

Als nächstes müssen Sie konfigurieren auf mehreren Adressen zu hören. Öffnen Sie /etc/postgresql/<version>/main/postgresql.conf und die Suche nach einer Zeile mit listen_addresses='localhost, und ändern, dass für:

listen_addresses='*' 

Nach diesen Änderungen sollten Sie in der Lage sein, auf Ihre lokale Postgres-Datenbank zu verbinden, aus dem Inneren des Behälters.

This Antwort könnten Sie weitere Erläuterungen darüber, wie auf dem lokalen Rechner aus dem Behälter zu verbinden.

+0

Was ist mit MySQL db? Derselbe Ansatz wird dafür funktionieren? –

0

aus dem Behälter zu dem Host zu verbinden, können Sie die IP-Adresse der docker0 Brücke benutzen. Führen Sie ifconfig auf dem Host, um die docker0 IP-Adresse zu finden (Standard ist 172.17.0.1 Ich glaube). Dann verbinden Sie sich von Ihrem Container aus.

Dies ist natürlich nicht super Host-portable wie die IP zwischen Maschinen ändern könnten, könnte so ein Wrapper-Skript nützlich sein, dass die IP in die Behälter zu finden und zu injizieren.

Besser noch, Postgres in einem Container! : P

Auch wenn an einen entfernten Postgres verbindet dann bietet nur die IP-Adresse der Remote-Instanz (nicht anders zu regelmäßiger Interkonnektivität hier).

Verwandte Themen