update
This commit is contained in:
+65
-1
@@ -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]].
|
||||
|
||||
Reference in New Issue
Block a user