Wie verbindet sich eine Docker-App mit einer Datenbank auf localhost?

Melden
  1. Einleitung zur Verbindung von Docker-Anwendungen mit lokalen Datenbanken
  2. Problem der Netzwerkkonfiguration in Docker
  3. Lösungen für die Verbindung zu einer lokalen Datenbank
  4. Zusammenfassung

Einleitung zur Verbindung von Docker-Anwendungen mit lokalen Datenbanken

Beim Entwickeln und Testen von Anwendungen, die in Docker-Containern laufen, stellt sich häufig die Frage,

wie man eine Verbindung zu einer Datenbank auf dem Host-System (localhost) herstellen kann. Da Container

in einer isolierten Netzwerkumgebung laufen, ist localhost aus Sicht des Containers nicht das gleiche wie

localhost auf dem Host. Das Verständnis dieser Netzwerkisolation ist entscheidend, um erfolgreich eine

Problem der Netzwerkkonfiguration in Docker

Standardmäßig hat jeder Container seine eigene Netzwerkumgebung. Innerhalb eines Containers verweist die Adresse

localhost oder 127.0.0.1 immer auf den Container selbst und nicht auf den Host-Rechner. Das heißt, wenn

eine Anwendung im Container versucht, sich unter localhost mit einer Datenbank zu verbinden, sucht sie

Lösungen für die Verbindung zu einer lokalen Datenbank

Um dennoch eine Verbindung zur Datenbank auf dem Host herzustellen, gibt es verschiedene Ansätze. Ein gängiger

Weg ist die Verwendung der speziellen Adresse host.docker.internal. Diese Adresse verweist auf den Host-Rechner

aus der Sicht des Containers heraus und funktioniert in vielen Docker-Versionen unter Windows und macOS

automatisch. Unter Linux ist host.docker.internal meist nicht standardmäßig verfügbar, kann aber über

Alternativ kann man das Netzwerk des Containers so konfigurieren, dass er mit dem Netzwerk des Hosts

zusammenarbeitet, indem man den Docker-Parameter --network=host beim Start des Containers verwendet.

Dabei nutzt der Container das gleiche Netzwerkinterface wie der Host, sodass localhost im Container auf

den Host verweist. Diese Methode ist aber oft nur unter Linux praktikabel, da sie in Windows und macOS

Ein weiterer Weg ist, den Port der lokalen Datenbank explizit für das Docker-Host-Netzwerk freizugeben

und im Container dann die IP-Adresse des Hosts (z.B. dessen lokale IP im Netzwerk) anstelle von localhost

Zusammenfassung

Das direkte Ansprechen einer lokalen Datenbank von einer Docker-Anwendung aus erfordert das Verständnis der

Docker-Netzwerkisolation. localhost im Container ist nicht localhost auf dem Host. Durch Nutzung der

Adresse host.docker.internal, Anpassung der Netzwerk-Einstellungen oder Verwendung der Host-IP kann man

dennoch eine Verbindung zur Datenbank herstellen und somit Entwicklungs- und Testprozesse erleichtern.

0

Kommentare