Um neun Uhr abends ging etwas kaputt
Die Seite eines Shops zeigt einen Fehler. Die Person, die ihn gebaut hat, schläft. Sie haben Bereitschaft und können niemanden fragen.
Alles, was Sie brauchen, liegt auf dem Rechner: was dem Programm gesagt wurde und was das Programm beim Laufen gesagt hat.
Am Ende dieser Lektion
Notiz
Ich kann herausfinden, wie ein Container eingerichtet wurde und was er gemeldet hat.
Schlüsselbegriffe
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Inspect | alle Einstellungen eines Containers lesen | |
| Log | die Meldungen, die ein Programm beim Laufen schreibt | |
| Exit-Code | die Zahl, die ein Programm beim Beenden liefert; 0 heißt Erfolg | |
| Health-Check | ein Test, den Docker wiederholt, um zu sehen, ob ein Dienst antwortet | |
| Umgebungsvariable | eine benannte Einstellung, die ein Programm erhält | NGINX_VERSION |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
docker inspect liest die Einrichtung
docker ps zeigt ein paar Spalten. docker inspect zeigt alles, was Docker über einen Container weiß, als JSON.
Selten liest man alles. --format wählt ein Feld aus, geschrieben in doppelten geschweiften Klammern. Die nächsten vier Befehle lesen Image, Türen, Speichergrenze und eine Umgebungsvariable von web.
Welches Image führt web aus?
docker inspect --format '{{.Config.Image}}' webHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Welche Türen nennt es?
docker inspect --format '{{json .Config.ExposedPorts}}' webHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Wie viel Speicher darf es nutzen, in Bytes?
docker inspect --format '{{.HostConfig.Memory}}' webHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Umgebungsvariable darin lesen
docker exec web printenv NGINX_VERSIONHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Beispiel: wer was festgelegt hat
| Sache | Wer sie festlegte | Wie man sie liest |
|---|---|---|
| Das Image | wer den Container gestartet hat | Config.Image |
| Die Türen (Ports) | die Autorin des Images, im Dockerfile | Config.ExposedPorts |
| Die Speichergrenze | die compose-Datei des Labs | HostConfig.Memory |
| NGINX_VERSION | die Autorin des Images, im Dockerfile | docker exec web printenv NGINX_VERSION |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Irrtum
Warnung
Viele glauben, docker ps zeige alles über einen Container. Es zeigt eine Zusammenfassung. Der Benutzer, unter dem er läuft, seine Grenzen, seine Umgebung und seine Gesundheit stehen nur in docker inspect. Mit ps finden Sie den Container, mit inspect befragen Sie ihn.
Ein Log ist, was das Programm sagte
Das Log eines Containers ist alles, was sein Hauptprogramm ausgegeben hat. docker logs zeigt es.
Ein stark genutzter Dienst schreibt viel. In diesem Lab ruft ein Health-Check web alle paar Sekunden auf, und jeder Aufruf ist eine Zeile. Darum filtert man. Fragen Sie zuerst nach einer Seite, die es nicht gibt.
web nach einer fehlenden Seite fragen
curl -s -o /dev/null -w "%{http_code}\n" http://web/missingHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Diese Anfrage im Log finden
docker logs web 2>&1 | grep "/missing"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Exit-Code und Health sagen, wie es endete
Ein Container läuft oder er hat angehalten. Wenn er anhält, sagt sein Exit-Code, wie. Null heißt, er wurde gut fertig. Jede andere Zahl heißt Fehler.
Ein Health-Check ist ein Test, den Docker wiederholt, solange der Container läuft. Das Ergebnis ist healthy oder unhealthy.
Läuft web? Welchen Exit-Code hat es?
docker inspect --format '{{.State.Status}} {{.State.ExitCode}}' webHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Besteht web seinen Health-Check?
docker inspect --format '{{.State.Health.Status}}' webHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Wie viel Speicher nutzt web jetzt?
docker stats --no-stream --format "{{.Name}} {{.MemUsage}}" webHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Beispiel: vier Fragen an einen gestörten Container
| Frage | Befehl | Was ein gestoppter Job "report" zeigen könnte |
|---|---|---|
| Läuft er? | docker ps -a | Exited (137) vor einer Minute |
| Wie endete er? | docker inspect --format '{{.State.ExitCode}}' report | 137: er wurde getötet |
| Was sagte er zuletzt? | docker logs --tail 5 report | eine Zeile über fehlenden Speicher |
| Was war ihm gesagt worden? | docker inspect --format '{{.HostConfig.Memory}}' report | eine Grenze, die für den Job zu klein ist |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Weiterführend
Der worker des Labs ist gestoppt. Sie haben jetzt die vier Fragen für ihn: Status, Exit-Code, Log und Einstellungen. Die Aufgabe des Labs ist, sie zu beantworten und ihn zu reparieren.
Führen Sie vorher docker inspect web ohne --format aus. Finden Sie die drei großen Abschnitte: Config, State und HostConfig.