This commit is contained in:
Mathias Schneider
2026-09-28 17:37:46 +02:00
parent 95797e4a3b
commit 50406e22d1
5 changed files with 487 additions and 3 deletions
+65 -1
View File
@@ -777,4 +777,68 @@ docker-compose up --build
- ✅ Automatische File-Verarbeitung
- ✅ Persistente Datenspeicherung
**Das ist die Macht von Docker! 🐳**
**Das ist die Macht von Docker! 🐳**
---
## Docker-Netzwerk bei Datenbankproblemen untersuchen
Bei einer Datenbank in einem Docker-Container muss zwischen verschiedenen
Netzwerkperspektiven unterschieden werden:
- **Innerhalb eines Docker-Netzwerks:** Container erreichen sich normalerweise
über den Compose-Service-Namen, zum Beispiel `postgres:5432`.
- **Auf dem Docker-Host:** Ein veröffentlichter Port wie `5432:5432` ist über
den Host erreichbar, häufig über `127.0.0.1:5432`.
- **Von außerhalb des Hosts:** Ein SSH-Tunnel kann einen lokalen Port auf den
Host-Port oder auf einen aus Sicht des Hosts erreichbaren Container-Endpunkt
weiterleiten.
### Docker-Bridge-Adressen
Adressen wie `172.19.0.1` und `172.19.0.2` gehören häufig zu einem Docker-
Bridge-Netzwerk:
- `172.19.0.1` ist typischerweise das Gateway des Netzwerks auf dem Host.
- `172.19.0.2` kann die aktuelle IP eines Containers sein.
Container-IPs sind nicht als dauerhafte Konfiguration geeignet. Nach einem
`docker compose up`, einer Neuerstellung oder einem Deployment kann derselbe
Container eine andere IP erhalten. Innerhalb von Compose-Netzwerken sollte der
Service-Name verwendet werden. Von außerhalb sollte nach Möglichkeit ein
veröffentlichter Host-Port verwendet werden.
### Nützliche Diagnosebefehle
```bash
# Laufende Container und veröffentlichte Ports anzeigen
docker ps
# Netzwerkdetails und aktuelle Container-IP anzeigen
docker inspect <container-name>
# Vorhandene Docker-Netzwerke anzeigen
docker network ls
# Teilnehmer und IPs eines Netzwerks anzeigen
docker network inspect <network-name>
# Prüfen, ob der Host lokal auf dem PostgreSQL-Port lauscht
sudo ss -ltnp | grep 5432
# TCP-Erreichbarkeit eines bestimmten Ziels testen
nc -vz <host> 5432
# PostgreSQL-Logs während eines Verbindungsversuchs beobachten
docker logs --tail 100 -f <postgres-container>
```
Wenn ein Client eine Verbindung mit `EOF` beendet, sollte zuerst geprüft
werden, ob überhaupt ein neuer Eintrag in den PostgreSQL-Logs erscheint. Ohne
Logeintrag liegt das Problem wahrscheinlich vor PostgreSQL, beispielsweise am
Tunnel, am Zielhost oder am Zielport. Ein Logeintrag zeigt, dass PostgreSQL
erreicht wurde; dann kommen unter anderem SSL- oder
Authentifizierungsparameter als Ursache infrage.
Siehe auch [[psql]], [[SSH Verbindung in Linux]] und
[[DBeaver PostgreSQL via SSH-Tunnel]].