![Docker-Container registriert Hostnamen nicht im Docker-internen DNS](https://rvso.com/image/776313/Docker-Container%20registriert%20Hostnamen%20nicht%20im%20Docker-internen%20DNS.png)
Ich verwende Docker, um einen Nextcloud-Dienst zu implementieren. Dazu verwende ich das offizielle Nextcloud-Apache-Image, einen Nginx-Reverse-Proxy, Certbot und MariaDB. Eigentlich nichts Besonderes.
Meine Docker-Instanz läuft im Swarm-Modus. Alle Container laufen zusammen mit dem Manager auf demselben Host mit nur einer Replik für jeden Dienst, Standard-Overlay-Netzwerk(e). Der Swarm wird mithilfe einer Standard-Compose-Datei gestartet.
Mein Setup lief viele Monate lang stabil, bis es gestern Abend auf mysteriöse Weise zusammenbrach. Soweit ich sehe, gab es keinerlei Updates oder Neustarts, weder für das Betriebssystem (Ubuntu Server LTS), Docker-CE noch für eines der Images (ich führe alle meine Updates manuell in regelmäßigen Abständen durch und habe sie gestern Abend definitiv nicht um 4 Uhr morgens durchgeführt). Ich habe die Ursache im Nextcloud-Container gefunden (aber ich denke, das ist ein Docker-Problem, daher meine Frage hier...):
Das Protokoll für den Nginx-Reverse-Proxy zeigt die folgende Zeile:
2022/04/06 20:16:45 [error] 10#10: *3 nextcloud-app could not be resolved (3: Host not found), client: 10.135.40.1, server: <redacted>, request: "GET / HTTP/1.1", host: "<redacted>"
Nginx kann den Backend-Server nicht auflösen und gibt eine 502/Bad Gateway-Meldung an den Client zurück.
Ich habe nachgesehen, und der Hostname für den Nextcloud-Container („nextcloud-app“) ist tatsächlich nicht im Docker-internen DNS registriert (in jedem Container unter 127.0.0.11 verfügbar). Ich kann mich bei jedem der Container anmelden und eine DNS-Anfrage abschicken (nachdem ich after apt-get update && apt-get install iputils-ping dnsutils
in den Containern ausgeführt wurde), der Name „nextcloud-app“ wird nirgends aufgelöst. Beispiel:
root@nextcloud-app:/var/www/html# nslookup nextcloud-app
Server: 127.0.0.11
Address: 127.0.0.11#53
** server can't find nextcloud-app: NXDOMAIN
Alle anderen Containernamen werden wie vorgesehen aufgelöst. Das Auflösen externer Adressen funktioniert ebenfalls. „nextcloud-app“ ist dienurnicht auflösbarer Containername.
Wie auch immer, ichdürfenPing zum und vom Nextcloud-App-Container unter Verwendung der Docker-internen IP-Adressen direkt. Die Konnektivität ist vorhanden, nur die DNS-Auflösung schlägt fehl.
Ich habe keine Ahnung, wie ich das weiter debuggen kann. Ich habe meine compose.yml-Datei eine Woche lang nicht angerührt. Soweit ich weiß, hat sich nichts geändert. Trotzdem funktionierte das Setup über Nacht nicht mehr.
Wie kann ich den Nextcloud-Container zwingen, seinen eigenen Hostnamen beim Docker-internen DNS zu registrieren? Alle Vorschläge sind willkommen.
Antwort1
Ich habe die Lösung gefunden. Diese Antwort ist für den armen Kerl, der in Zukunft vielleicht vor dem gleichen Problem steht.
Es stellte sich heraus, dass es doch kein Docker-Problem war. Nextcloud ging während der Nacht in den Wartungsmodus (aus noch unbekannten Gründen, das muss als nächstes untersucht werden). Aus irgendeinem Grund konnte sich das Nextcloud-Docker-Image im Wartungsmodus nicht im DNS von Docker registrieren (aufgrund eines Fehlers im Image?), und die Situation kam zum Stillstand: Keine DNS-Auflösung, kein Zugriff auf Nextcloud über Reverse-Proxy --> keine Kenntnis davon, dass Nextcloud im Wartungsmodus ist --> für immer im Wartungsmodus bleiben, keine DNS-Auflösung, ...
Wenn ich nur daran gedacht hätte, zu prüfen, ob Nextcloud im Wartungsmodus ist, hätte ich mir mehrere Stunden Debugging und Kopfzerbrechen ersparen können. Nextcloud aus dem Wartungsmodus zu holen war/ist eine Sache von wenigen Minuten. Fühle mich gerade ein bisschen dumm. ;-)