Ein zeitaufwändiger Fehlerbehebungsprozess für einen Docker-Fehler

Ein zeitaufwändiger Fehlerbehebungsprozess für einen Docker-Fehler

Herkunft

Der Kunde bestellte bei Sangfor ein maßgeschneidertes System, das auf CentOS basierte. Nach einer langen Untersuchung stellten wir fest, dass das Problem tatsächlich eine Dateibeschädigung war und kein Docker-Problem.

Umweltinformationen

Docker-Informationen:

$ Docker-Info
Behälter: 0
 Laufen: 0
 Pausiert: 0
 Angehalten: 0
Bilder: 2
Serverversion: 18.09.3
Speichertreiber: overlay2
 Unterstützendes Dateisystem: xfs
 Unterstützt d_type: true
 Native Overlay Diff: wahr
Protokollierungstreiber: JSON-Datei
Cgroup-Treiber: cgroupfs
Plugins:
 Lautstärke: lokal
 Netzwerk: Bridge-Host Macvlan Null-Overlay
 Protokoll: awslogs fluentd gcplogs gelf journald json-Datei lokale Protokolleinträge splunk syslog
Schwarm: inaktiv
Laufzeiten: runc
Standardlaufzeit: runc
Binärdatei initialisieren: docker-init
Containerd-Version: e6b3f5632f50dbc4e9cb6288d911bf4f5e95b18e
Runc-Version: 6635b4f0c6af3810594d2770f662f34ddc15b40d
Init-Version: fec3683
Sicherheitsoptionen:
 sicherheitskomp
 Profil: Standard
Kernel-Version: 3.10.0
Betriebssystem: CentOS Linux 7 (Core)
Betriebssystemtyp: Linux
Architektur: x86_64
CPUs: 20
Gesamtspeicher: 125,3 GiB
Bezeichnung: eds-1f21a854
ID: VZLV:26PU:ZUN6:QQEJ:GW3I:YETT:HMEU:CK6J:SIPL:CHKV:6ASN:5NDF
Docker-Stammverzeichnis: /data/kube/docker
Debug-Modus (Client): false
Debug-Modus (Server): false
Registrierung: https://index.docker.io/v1/
Beschriftungen:
Experimentell: falsch
Unsichere Register:
 reg.wps.lan:5000
 treg.yun.wps.cn
 127.0.0.0/8
Registrierungsspiegel:
 https://registry.docker-cn.com/
 https://docker.mirrors.ustc.edu.cn/
Live-Wiederherstellung aktiviert: false
Produktlizenz: Community Engine

Systeminformationen

$ uname -a
Linux eds-1f21a854 3.10.0 #1 SMP Montag, 28. September 2020, 12:00:30 CST x86_64 x86_64 x86_64 GNU/Linux
$ Katze /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel-Fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

Serverinformationen:

$ Katze Produktname
SUGON-60G16
$ Katze sys_vendor
SANGFOR
$ cat Produktversion
1.2

Fehlerbehebungsprozess

Die Installation des Docker-Servers hängt

Uhrzeit 2020 10/29 19:51:

Implementierung: Als der Kunde die Bereitstellung durchführte, stürzte der Server bei der Installation von Docker ab. Ich: Gibt es nach dem Booten irgendwelche Informationen in /var/log/message? Implementierung: Ich kann nur den Snapshot wiederherstellen, um ihn einzugeben, der Server kann nicht aufgerufen werden und ich kann die Informationen nicht sehen. Ich: Kann es nicht starten, ohne den Snapshot wiederherzustellen? Implementierung: Ja

An diesem Punkt dachte ich, dass ein Kernel-Fehler ausgelöst wurde und der Kernel in Panik geriet, sodass der Server nicht gestartet werden konnte.

Uhrzeit 30.10.2020 9:07 Uhr:

Ich: Als es nicht gestartet werden konnte, sind Sie dann in die Konsole gegangen, um zu prüfen, warum es nicht gestartet werden konnte? Implementierung: Kann der Client-Server das nicht prüfen? Ich: Hat der Client das nicht geprüft?

Anschließend hat die Implementierung direkt eine Sunflower-Remoteverbindung gesendet. Nachdem ich nach oben gegangen war, stellte ich fest, dass es sich nicht um ein normales Betriebssystem handelte, sondern um ein modifiziertes, das auf CentOS basiert. Ich konnte /var/log/message nicht finden und führte dann unser Docker-Installationsskript manuell aus.

bash -x install-docker.sh

Dann stoppten die Ausgabeinformationen bei einem bestimmten Schritt, sie sollten "hängen". Ich habe mir die letzten vom Skript ausgegebenen Debuginformationen angesehen und festgestellt, dass darauf der Start von Docker folgte, was durch den Start von Docker ausgelöst werden sollte. Dann konnte ich nach langer Zeit immer noch keine Verbindung herstellen oder einen Ping auslösen, also bat ich das Implementierungspersonal, vor Ort zu prüfen, ob es sich um einen Hardwareserver handelte und ob Idrac, ilo usw. vorhanden waren, um die Informationen der TTY-Konsole zu überprüfen.

Das Personal vor Ort überprüfte den Server und stellte fest, dass er „normal startete“. Ich versuchte es, konnte aber trotzdem keine Verbindung herstellen. Sie fragten uns, ob die Route geändert wurde. Ich überprüfte vor Ort mit systemctl und stellte fest, dass Docker aktiv war. Von der Site aus kann weiterhin kein Ping an das Gateway gesendet werden. Plötzlich kam mir der Gedanke, dass es vielleicht gar nicht aufgehängt war. . .

Ich habe ihn gebeten, „uptime -s“ auszuführen, um die letzte Startzeit zu überprüfen, aber es stellte sich heraus, dass er überhaupt keinen Neustart durchgeführt hatte. . .

Dann stellten wir vor Ort fest, dass es sich um ein iptables-Problem handelte. Als wir Docker starteten, wurden deren Regeln gelöscht. Später nahmen sie einige Änderungen vor und veröffentlichten sie alle. Daher war die Tatsache, dass die Maschine beim Starten von Docker hängen blieb, tatsächlich auf den Einfluss von iptables zurückzuführen, der dazu führte, dass die Netzwerkverbindung getrennt wurde und die Maschine überhaupt nicht neu gestartet wurde.

Starten Sie den Container und er stürzt ab

Fahren Sie dann fort. Die Implementierung besagt, dass das obige Problem bei der Installation von Docker auf anderen Computern zuvor nicht aufgetreten ist, das obige Problem jedoch beim Start aufgetreten ist. Ich habe die Bereitstellung manuell ausgeführt und ein Fehler wurde gemeldet. Das Skript öffnet -x debugging und sieht, dass beim Laden des Bereitstellungsimages ein Fehler gemeldet wird.

Fehler beim Verbinden: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.39/images/load?quiet=0: read unix @->/var/run/docker.sock: read: EOF

Manuelle Ausführung:

$ docker load -i ./kube/images/deploy.tar
Fehler beim Verbinden: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.39/images/load?quiet=0: read unix @->/var/run/docker.sock: read: Verbindung vom Peer zurückgesetzt

Ich habe jounalctl überprüft und keine relevanten Protokolle für den Docker-Daemon gefunden. Ich habe nach diesem Fehler gesucht und einige Leute sagten, dass die Docker-Gruppe von /var/run/docker.sock nicht existiert, während andere das Problem durch die direkte Verwendung von chmod 777 gelöst haben. Ich habe es versucht, aber es funktioniert immer noch nicht. Debuggen Sie den Docker an der Rezeption, um zu sehen, ob nützliche Informationen vorliegen:

systemctl stoppt Docker
pkill dockerd
dockerd -D

Öffnen Sie ein weiteres Terminal und führen Sie den Vorgang zum Laden des Bildes aus:

$ docker load -i ./kube/images/deploy.tar
ab6425526dab: Ebene wird geladen [======================================================>] 126,3 MB/126,3 MB
c7fe3ea715ef: Ebene wird geladen [========================================================>] 340,3 MB/340,3 MB
7f7eae7934f7: Ebene wird geladen [======================================================>] 3,584kB/3,584kB
e99a66706b50: Ebene wird geladen [=======================================================>] 2,105 MB/2,105 MB
245b79de6bb7: Ebene wird geladen [========================================================>] 283,5 MB/283,5 MB
2a56a4432cef: Ebene wird geladen [=======================================================>] 93,18kB/93,18kB
0c2ea71066ab: Ebene wird geladen [======================================================>] 276,5kB/276,5kB
bb3f6df0f87c: Ebene wird geladen [=======================================================>] 82,94kB/82,94kB
6f34ead3cef7: Ebene wird geladen [======================================================>] 946,7kB/946,7kB
c21422dd15f6: Ebene wird geladen [=======================================================>] 1,97 MB/1,97 MB
940288517f4c: Ebene wird geladen [=======================================================>] 458,2 kB/458,2 kB
0c52f1af61f4: Ebene wird geladen [=======================================================>] 5,12kB/5,12kB
049e7edd48bc: Ebene wird geladen [=======================================================>] 1,57 MB/1,57 MB
73307245d702: Ebene wird geladen [=======================================================>] 5,632kB/5,632kB
f109309d8ffc: Ebene wird geladen [=======================================================>] 2,175 MB/2,175 MB
Geladenes Bild: xxxxxxxxxxxx.cn/platform/deploy-amd64:ubuntu.16.04
$ Docker-Bilder
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
xxxxxxxxxxxx.cn/platform/deploy-amd64 ubuntu.16.04 3ad94a76af5d vor 3 Monaten 734 MB

Die Front-End-Protokollausgabe ist auf der Debugseite normal

...
DEBU[2020-10-30T14:48:39.955963986+08:00] Angewandter Tar sha256:049e7edd48bc46e3dd5edf89c9caa8f0f7efbb41af403c5a54dd4f1008f604a7 auf d58edd0d97bb672ef40e82e45c1603ca3ceaad847d9b9fc7c9b0588087019649, Größe: 1518278
DEBU[2020-10-30T14:48:39.960091040+08:00] Tar anwenden in /data/kube/docker/overlay2/b044bd592ae800ed071208c6b2f650c5cbdc7452702f56a23b9b4ffe4236ac18/diff storage-driver=overlay2
DEBU[2020-10-30T14:48:40.059510528+08:00] Angewandter Tar sha256:73307245d7021f9627ca0b2cbfeab3aac0b65abfd476f6ec26bb92c75892d7e2 auf b044bd592ae800ed071208c6b2f650c5cbdc7452702f56a23b9b4ffe4236ac18, Größe: 3284
DEBU[2020-10-30T14:48:40.063040538+08:00] Tar anwenden in /data/kube/docker/overlay2/03918b1d275aa284532b8b9c59ca158409416f904e13cc7084c598ed343e844f/diff storage-driver=overlay2
DEBU[2020-10-30T14:48:40.148209852+08:00] Angewandter Tar sha256:f109309d8ffcb76589ad6389e80335d986b411c80122d990ab00a02a3a916e3e bis 03918b1d275aa284532b8b9c59ca158409416f904e13cc7084c598ed343e844f, Größe: 2072803
^CINFO[2020-10-30T14:48:55.593523177+08:00] Signal „Unterbrechung“ wird verarbeitet
DEBU[2020-10-30T14:48:55.593617229+08:00] Daemon mit einem minimalen Shutdown-Timeout von 15 Sekunden konfiguriert
DEBU[2020-10-30T14:48:55.593638628+08:00] starte ein sauberes Herunterfahren aller Container mit einem Timeout von 15 Sekunden...
DEBU[2020-10-30T14:48:55.594074457+08:00] Unix-Socket /run/docker/libnetwork/ebd15186e86385c48c4c5508d5f30eb83d5d74e56f09af5c82b6d6d9d63ec8b8.sock existiert nicht. Client-Verbindungen können nicht akzeptiert werden
DEBU[2020-10-30T14:48:55.594106623+08:00] Alte Mount-ID bereinigen: Start.
INFO[2020-10-30T14:48:55.594157536+08:00] Anhalten des Ereignisstroms nach ordnungsgemäßem Herunterfahren Fehler="<nil>" module=libcontainerd namespace=moby
DEBU[2020-10-30T14:48:55.594343122+08:00] Alte Mount-ID bereinigen: erledigt.
DEBU[2020-10-30T14:48:55.594501828+08:00] Sauberes Herunterfahren erfolgreich
INFO[2020-10-30T14:48:55.594520918+08:00] Beenden des Healthchecks nach ordnungsgemäßem Herunterfahren module=libcontainerd
INFO[2020-10-30T14:48:55.594531978+08:00] Anhalten des Ereignisstroms nach ordnungsgemäßem Herunterfahren Fehler="Kontext abgebrochen" Modul=libcontainerd Namespace=plugins.moby
DEBU[2020-10-30T14:48:55.594603119+08:00] empfangenes Signal signal=beendet
INFO[2020-10-30T14:48:55.594739890+08:00] pickfirstBalancer: HandleSubConnStateChange: 0xc4201a61b0, TRANSIENT_FAILURE Modul=grpc
INFO[2020-10-30T14:48:55.594751465+08:00] pickfirstBalancer: HandleSubConnStateChange: 0xc4201a61b0, VERBINDEN Modul=grpc

Ich habe mir die systemd-Konfiguration angesehen und nichts Besonderes gefunden. Ich war verwirrt, warum es importiert werden konnte, wenn es im Vordergrund ausgeführt wurde. Ich konnte mir keine Lösung für das Problem vorstellen und vermutete daher, dass es sich um ein Socket-Problem handeln könnte. Ich habe versucht, es mit Socat an TCP weiterzuleiten, aber es hat immer noch nicht funktioniert (hier sollten Sie versuchen, TCP, das 127 abhört, zum Daemon hinzuzufügen, nicht über den Socket, und Socat hat den Socket schließlich weitergegeben).

$ socat -d -d TCP-LISTEN:2375,fork,bind=127.0.0.1 UNIX:/var/run/docker.sock
2020/10/30 17:39:58 socat[5201] N hört auf AF=2 127.0.0.1:2375
^[[C2020/10/30 17:42:06 socat[5201] N akzeptiert Verbindung von AF=2 127.0.0.1:35370 auf AF=2 127.0.0.1:2375
2020/10/30 17:42:06 socat[5201] N hat den Kindprozess 11501 abgezweigt
2020/10/30 17:42:06 socat[5201] N hört auf AF=2 127.0.0.1:2375
2020/10/30 17:42:06 socat[11501] N öffnet Verbindung zu AF=1 "/var/run/docker.sock"
2020/10/30 17:42:06 socat[11501] N erfolgreich verbunden von lokaler Adresse AF=1 "\0\0\0\0\0\0 \x0D\x@7\xE9\xEC\x7E\0\0\0\x01\0\0\0\0"
2020/10/30 17:42:06 socat[11501] N Start einer Datenübertragungsschleife mit FDs [6,6] und [5,5]
2020/10/30 17:42:12 socat[11501] E write(5, 0x55f098349920, 8192): Rohrbruch
2020/10/30 17:42:12 socat[11501] N Ausgang(1)
2020/10/30 17:42:12 socat[5201] N childdied(): Signal 17 verarbeiten

$ docker --log-level debug -H tcp://127.0.0.1:2375 load -i kube/images/deploy.tar
c7fe3ea715ef: Ebene wird geladen [==============================================> ] 286,9 MB/340,3 MB
unerwarteter EOF

Am Ende hat es ziemlich lange gedauert. Ich war zu der Zeit beschäftigt und habe mir deshalb das Problem eines anderen Kunden angesehen. Dann bin ich hierher zurückgekommen und habe spontan versucht, andere Bilder hochzuladen. Es hat funktioniert. . .

$ docker load -i kube/images/pause_3.1.tar
e17133b79956: Ebene wird geladen [=======================================================>] 744,4kB/744,4kB
Geladenes Bild: mirrorgooglecontainers/pause-amd64:3.1
$ docker load -i kube/images/tiller_v2.16.1.tar
77cae8ab23bf: Ebene wird geladen [=======================================================>] 5,815 MB/5,815 MB
679105aa33fb: Ebene wird geladen [=======================================================>] 6,184 MB/6,184 MB
639eab5d05b1: Ebene wird geladen [=======================================================>] 40,46 MB/40,46 MB
87e5687e03f2: Ebene wird geladen [=======================================================>] 41,13 MB/41,13 MB
Geladenes Image: gcr.io/kubernetes-helm/tiller:v2.16.1
$ docker load -i kube/images/calico_v3.1.3.tar
cd7100a72410: Ebene wird geladen [========================================================>] 4,403 MB/4,403 MB
ddc4cb8dae60: Ebene wird geladen [======================================================>] 7,84 MB/7,84 MB
77087b8943a2: Ebene wird geladen [======================================================>] 249,3kB/249,3kB
c7227c83afaf: Ebene wird geladen [=======================================================>] 4,801 MB/4,801 MB
2e0e333a66b6: Ebene wird geladen [======================================================>] 231,8 MB/231,8 MB
Geladenes Bild: calico/node:v3.1.3
2580685bfb60: Ebene wird geladen [=======================================================>] 50,84 MB/50,84 MB
Geladenes Bild: calico/kube-controllers:v3.1.3
0314be9edf00: Ebene wird geladen [=======================================================>] 1,36 MB/1,36 MB
15db169413e5: Ebene wird geladen [======================================================>] 28,05 MB/28,05 MB
4252efcc5013: Ebene wird geladen [=======================================================>] 2,818 MB/2,818 MB
76cf2496cf36: Ebene wird geladen [======================================================>] 3,03 MB/3,03 MB
91d3d3a16862: Ebene wird geladen [=======================================================>] 2,995 MB/2,995 MB
18a58488ba3b: Ebene wird geladen [========================================================>] 3,474 MB/3,474 MB
8d8197f49da2: Ebene wird geladen [=======================================================>] 27,34 MB/27,34 MB
7520364e0845: Ebene wird geladen [======================================================>] 9,216kB/9,216kB
b9d064622bd6: Ebene wird geladen [=======================================================>] 2,56kB/2,56kB
Geladenes Bild: calico/cni:v3.1.3

Nur beim Importieren tritt ein Fehler auf

$ docker load -i kube/images/deploy.tar
Fehler beim Verbinden: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.39/images/load?quiet=0: read unix @->/var/run/docker.sock: read: Verbindung vom Peer zurückgesetzt

Anschließend wurde die Prüfsumme der Datei auf der Maschine, die das Paket erstellt hatte, verglichen und es stellte sich heraus, dass sie falsch war. . . .

Zusammenfassen

Eine Frage ist, warum das Front-End dies tun kann. Zweitens löscht der Docker-Daemon keine Protokolle, wenn die Datei beschädigt und importiert wird, und setzt die Verbindung direkt zurück. Die neue Version hat diese Situation nicht getestet.

Dies ist das Ende dieses Artikels über den zeitaufwändigen Fehlerbehebungsprozess bei Docker-Fehlern. Weitere relevante Inhalte zur zeitaufwändigen Fehlerbehebung bei Docker-Fehlern finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Docker kann keine Verbindung zum Docker-Daemon herstellen. Läuft der Docker-Daemon auf diesem Host? Fehlerlösung
  • Docker-Daemon kann nicht gestartet werden: stimmt nicht mit der gespeicherten UUID-Fehlerlösung überein
  • Lösen Sie das Problem, dass der Container nach dem Docker-Lauf „Beendet (0)“ anzeigt.
  • Lösung für mehrere Docker-Container, die nicht die gleiche Portnummer haben
  • Schritte für den Exit-Fehlercode des Docker-Containers

<<:  JavaScript generiert dynamisch eine Tabelle mit Zeilenlöschfunktion

>>:  MySQL-Gruppierungsabfragen und Aggregatfunktionen

Artikel empfehlen

Implementierung eines Element-Eingabefelds, das automatisch den Fokus erhält

Beim Erstellen eines Formulars in einem aktuellen...

Der einfachste Weg zum Debuggen gespeicherter Prozeduren in MySQL

Ein Kollege hat mir einmal gesagt, ich solle eine...

Detaillierte Erläuterung des Lazy Loading und Preloading von Webpack

Inhaltsverzeichnis Normale Belastung Lazy Loading...

VMware12 installiert die Desktopversion von Ubuntu19.04 (Installations-Tutorial)

1. Versuchsbeschreibung Installieren Sie in der v...

Detaillierte Interpretation der Datei /etc/fstab im Linux-System

Vorwort [root@localhost ~]# cat /etc/fstab # # /e...

Linux-Datei-/Verzeichnisberechtigungen und Eigentümerverwaltung

1. Übersicht über Dateiberechtigungen und Eigentu...

Vue implementiert grafischen Überprüfungscode

In diesem Artikelbeispiel wird der spezifische Co...

Verwendung von Vue-Filtern und Probleme bei der Zeitstempelkonvertierung

Inhaltsverzeichnis 1. Das Konzept schnell erkenne...

Gängige Angriffe auf Web-Frontends und Möglichkeiten, sie zu verhindern

Die Sicherheitsprobleme, die bei der Frontend-Ent...

Detaillierte Einführung in den MySQL-Datenbankindex

Inhaltsverzeichnis Mindmap Einfaches Verständnis ...

HTML realisiert Hotel-Screening-Funktion über Formular

<!doctype html> <html xmlns="http:/...