Im vorherigen Schritt haben wir den Status des Docker-Daemons mit dem Standardausgabeformat von docker info
überprüft. Während das Standardformat für Menschen leicht lesbar ist, eignet es sich nicht ideal für die programmatische Verarbeitung. In diesem Schritt lernen wir, wie man die Docker-Informationen im JSON-Format abruft, das sich viel besser für Skripting und Automatisierung eignet.
Um die Ausgabe im JSON-Format zu erhalten, können wir das Flag --format
mit dem Befehl docker info
verwenden und das Format als json
angeben.
Führen Sie folgenden Befehl im Terminal aus:
docker info --format '{{json .}}'
Lassen Sie uns diesen Befehl aufschlüsseln:
docker info
: Dies ist der Basisbefehl zum Abrufen von Docker-Systeminformationen.
--format '{{json .}}'
: Dieses Flag weist Docker an, die Ausgabe zu formatieren. Der Wert '{{json .}}'
verwendet Go-Templating-Syntax. .
repräsentiert die gesamte Datenstruktur, die von docker info
zurückgegeben wird, und {{json .}}
formatiert diese Struktur als JSON-String.
Nach Ausführung des Befehls sehen Sie dieselben Informationen wie zuvor, diesmal jedoch als gültiges JSON-Objekt. Die Ausgabe sieht etwa so aus (der genaue Inhalt variiert je nach Docker-Umgebung):
{
"ID": "...",
"Containers": 0,
"ContainersRunning": 0,
"ContainersPaused": 0,
"ContainersStopped": 0,
"Images": 0,
"Driver": "overlay2",
"SystemStatus": null,
"Plugins": {
"Volume": ["local"],
"Network": ["bridge", "host", "ipvlan", "macvlan", "null", "overlay"],
"Authorization": null,
"Log": [
"awslogs",
"fluentd",
"gcplogs",
"gelf",
"journald",
"json-file",
"local",
"logentries",
"splunk",
"syslog"
]
},
"MemoryLimit": true,
"SwapLimit": true,
"KernelMemory": true,
"CpuCfsPeriod": true,
"CpuCfsQuota": true,
"CpuShares": true,
"CpuSet": true,
"PidsLimit": true,
"OomKillDisable": true,
"IPv4Forwarding": true,
"BridgeNfIptables": true,
"BridgeNfIp6tables": true,
"Debug": false,
"NFd": -1,
"OomScoreAdj": -1,
"Goroutines": -1,
"SystemTime": "...",
"LoggingDriver": "json-file",
"CgroupDriver": "cgroupfs",
"CgroupVersion": "1",
"NEventsListener": -1,
"KernelVersion": "...",
"OperatingSystem": "...",
"OSType": "linux",
"Architecture": "x86_64",
"IndexServerAddress": "https://index.docker.io/v1/",
"RegistryConfig": {
"AllowNondistributableArtifactsAfterDate": "2020-12-25T00:00:00Z",
"InsecureRegistryCIDRs": ["127.0.0.0/8"],
"IndexConfigs": {
"docker.io": {
"Name": "docker.io",
"Mirrors": [],
"Secure": true,
"Official": true
}
},
"Mirrors": []
},
"NCPU": -1,
"MemTotal": -1,
"GenericResources": null,
"DockerRootDir": "/var/lib/docker",
"HttpProxy": "",
"HttpsProxy": "",
"NoProxy": "",
"ExperimentalBuild": false,
"LiveRestoreEnabled": false,
"Runtimes": { "runc": { "path": "runc" } },
"DefaultRuntime": "runc",
"Swarm": {
"NodeID": "",
"LocalNodeState": "inactive",
"ControlAvailable": false,
"Error": "",
"RemoteManagers": null
},
"ContainerdCommit": { "ID": "...", "Expected": "..." },
"RuncCommit": { "ID": "...", "Expected": "..." },
"InitCommit": { "ID": "...", "Expected": "..." },
"SecurityOptions": ["apparmor", "seccomp"],
"ProductLicense": "",
"DefaultAddressPools": null,
"Warnings": null
}
Diese JSON-Ausgabe kann einfach von Skriptsprachen oder anderen Tools verarbeitet werden, was sie sehr nützlich für die Automatisierung von Docker-bezogenen Aufgaben macht.