GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Docker mit Docker Inspect ein Vergrößerungsglas zeigen

Wenn Sie nach einer detaillierten Ansicht aller Hauptkomponenten von Docker von Docker-Images, Containern usw. suchen, ist der Befehl docker inspect genau das Richtige für Sie.

In diesem Tutorial erfahren Sie, wie Sie ein Spürhund werden, um detaillierte Informationen zu vielen Docker-Komponenten zum Debuggen, zur Fehlerbehebung oder einfach nur aus Neugier zu entdecken.

Fangen wir an!

Voraussetzungen

Wenn Sie Schritt für Schritt folgen möchten, stellen Sie sicher, dass Sie Folgendes haben:

  • Docker – Dieses Tutorial verwendet Docker v19.03.11 auf Ubuntu 18.04.5 LTS.
  • Jedes heruntergeladene und verfügbare Docker-Image. Dieses Tutorial verwendet das neueste NGINX-Docker-Image, das auf Docker Hub verfügbar ist.
  • Mindestens ein Container, der auf dem Docker-Host ausgeführt wird.

Inspizieren von Docker-Images mit Docker Inspect

Der Docker Inspect kann Informationen zu vielen verschiedenen Docker-Komponenten bereitstellen, aber beginnen wir zunächst mit einer der beliebtesten Komponenten; Bilder. Wenn Sie ein Bild heruntergeladen haben, wie suchen Sie dann nach Informationen zu diesem Bild? Finden wir es heraus.

Angenommen, Sie haben mindestens ein Image auf Ihrem Docker-Host, verwenden Sie inspect Befehl, um dieses Bild abzufragen. Der folgende Befehl geht davon aus, dass Sie ein Image namens nginx haben auf Ihrem Host.

docker image inspect nginx

Nach der Ausführung gibt der obige Befehl eine Reihe von Informationen über JSON zu diesem bestimmten Bild zurück. Einige bemerkenswerte Attribute sind:

  1. Das Image-Tag.
  2. Die Zeit, zu der das Bild erstellt wurde.
  3. Der Hostname des zugehörigen Containers mit dem Docker-Image nginx.
  4. Die Netzwerkports, die der Container dem externen Netzwerk zur Verfügung stellt.
  5. Sie werden auch die Volumes bemerken, die an den Container angehängt sind, der zum Docker-Image nginx gehört.

Detaillierte Informationen zu Docker-Netzwerken erhalten

Die docker inspect Befehl ist nicht nur darauf beschränkt, Informationen über Bilder und Container zu sammeln; es kann auch Netzwerke abfragen. Docker-Netzwerke ermöglichen es Containern, auf verschiedene Arten zu kommunizieren, z. B. über ein Bridge-Netzwerk (ein privates Netzwerk), ein Host-Netzwerk (ein öffentliches Netzwerk) oder ein Overlay-Netzwerk.

Die Kenntnis von Docker-Netzwerken ist wichtig, da Sie jederzeit je nach Bedarf der Anwendung zu einem anderen Docker-Netzwerk wechseln können, indem Sie die Verbindung trennen und dann wieder verbinden.

Angenommen, Sie befinden sich noch auf dem Terminal:

1. Führen Sie den folgenden Befehl aus. Das docker network ls Der Befehl listet alle im Docker vorhandenen Netzwerke auf. Sie benötigen die Ausgabe dieses Befehls, um die ID des Netzwerks zu finden.

docker network ls

Übergeben Sie als Nächstes eine Netzwerk-ID an das docker inspect network Befehl. Dieser Befehl gibt verschiedene Informationen über das jeweilige Netzwerk zurück, wie unten gezeigt.

docker inspect network 4748f122c987

1. Die Art des Netzwerks.

2. Die vom Netzwerk verwendete Subnetzadresse.

3 und 4. Zusammenfassende Informationen zu jedem Container, der dieses bestimmte Netzwerk verwendet.

Go-Templates von Docker und das format verstehen Parameter

Bis jetzt haben Sie gelernt, wie Sie den Docker-Inspect-Befehl verwenden, ohne zusätzliche Optionsparameter zu verwenden. Aber wenn Sie das Ausgabeformat manipulieren müssen, ziehen Sie die Verwendung von --format in Betracht Flagge. Das --format -Parameter verwendet Go-Vorlagen, um die von docker inspect zurückgegebenen Informationen zu filtern und anzuzeigen .

Zusammen mit dem Format-Flag werden verschiedene Funktionen verwendet, wie z. B. join, println, table usw. Lassen Sie uns einige davon besprechen!

Vielleicht möchten Sie beispielsweise einige Werte aus der Ausgabe eines bestimmten Containers zusammenführen. Wenn ja, join Befehl funktioniert gut. Unten sehen Sie, dass join Befehl verkettet Zeichenfolgen (nginx, -g, daemon off ) wobei jedes Element durch ein Trennzeichen getrennt ist (, ).

docker inspect --format '{{join .Args " , "}}' container_id

Vielleicht möchten Sie einen Wert kapitalisieren? Verwenden Sie den upper Befehl.

docker inspect --format "{{upper .Name}}" container_id

Sie können viele verschiedene Beispiele für die Verwendung des format finden Parameter.

Suchen des Basis-Image-Namens eines Docker-Containers

Im vorherigen Abschnitt haben Sie gesehen, wie Sie eine detaillierte Ansicht aller Ihrer Docker-Images erhalten, einschließlich der Container, die diese Images verwenden. Was aber, wenn Sie bereits eine Container-ID kennen und schnell das Image finden müssen, aus dem sie erstellt wurde? Sie können die Container-ID für docker inspect bereitstellen .

Führen Sie den folgenden docker inspect aus, um den Namen des Images zu finden, aus dem ein bestimmter Container erstellt wurde Befehl. Der folgende Befehl übergibt die Container-ID (8f34d039fa3a in diesem Fall) zu docker inspect und verwendet das format Parameter, um nur das image zurückzugeben Wert aus der Config -Knoten in der JSON-Ausgabe.

# 8f34d039fa3a is the container represented with ContainerID.
docker inspect --format='{{.Config.Image}}' 8f34d039fa3a

Sie können sehen, was die gesamte Config Knoten sieht wie unten aus und wo das Image Name kommt von.

IP-Adresse, Mac-Adresse und Portbindungen eines Containers finden

Obwohl Sie jetzt wissen, wie Sie das Netzwerk finden, das ein Container verwendet, woher wissen Sie, welche IP-Adresse oder Mac-Adresse und welche Portbindungen in diesem Netzwerk ein Container verwendet? Du hast es erraten! docker inspect .

Um die von einem Container verwendete IP-Adresse einzugrenzen, übergeben Sie die Container-ID an docker inspect Befehl. Verwenden Sie wieder das format -Parameter, um das unerwünschte JSON herauszufiltern, damit Sie genau das finden, wonach Sie suchen.

Sie sehen das format Parameterargument unten sagt docker inspect nur um den in NetworkSettings eingebetteten Wert zurückzugeben →NetworksIPAddress JSON-Attribut mit dem range Attribut. Mit dem Range-Attribut können Sie über ein Array iterieren, indem Sie . festlegen Wert für jedes Array-Element.

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my_container

Sie sehen die wichtigsten NetworkSettings Knoten unten und wo die IPAddress Wert ist verschachtelt.

Ähnlich, um die MAC-Adresse zu finden des Containers verwenden Sie docker inspect Container-Befehl wie unten gezeigt.

Auch hier sehen Sie das format Parameterargument unten verwendet den range Attribut, aber finden Sie dieses Mal die Mac-Adresse des Containers, indem Sie NetworkSettings überprüfen →NetworksMac address .

docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' 3dd206041249

Schließlich, um alle Portbindungen eines Containers zu überprüfen Führen Sie den folgenden docker inspect aus Befehl. Sie sehen das format Parameterargument unten verwendet den range -Attribut, um die Portbindungen des Containers zu finden, indem Sie NetworkSettings einchecken →HostPort .

Jeder sollte über die Portbindungen Bescheid wissen, denn wenn ein Port bereits verwendet wird, sollte er nicht erneut verwendet werden; Andernfalls wird eine Fehlermeldung ausgegeben, die besagt, dass der Port bereits zugewiesen wurde.

docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' 8f34d039fa3a

Erhalten einer detaillierten Ansicht des Docker-Volumes mit Docker Inspect

Bis jetzt haben Sie gelernt, wie Sie detaillierte Informationen zu den Images, Containern und Netzwerken finden, aber Sie haben nichts über Speicher gelernt. Lass uns das ändern.

Um sicherzustellen, dass das Tutorial mindestens ein gemountetes Volume hat, das mit einem Container verbunden ist, erstellen wir zuerst einen Container und mounten ein Speichervolume.

Wenn Sie bereits ein Speichervolume in einem Container gemountet haben, können Sie diesen Teil überspringen.

Der folgende Befehl erstellt einen neuen Docker-Container namens my_container , macht Port 80 für den Host verfügbar (-p 80:80 ), stellt ein Volume basierend auf /var/container_dir des Hosts bereit Verzeichnis namens mounted_val (-v mounted_vol:/var/container_dir ) mit nginx Bild.

docker run --name my_container -p 80:80 -v mounted_vol:/var/container_dir nginx

Nachdem Sie nun ein Volume in einem Container gemountet haben, geben Sie den Namen des Volumes an docker volume inspect an . Beachten Sie unten, dass der Befehl eine JSON-Ausgabe zurückgibt, die nur Informationen über das bereitgestellte Speichervolume bereitstellt.

docker volume inspect mounted_vol

Schlussfolgerung

Sie sollten jetzt docker inspect verwenden können Befehl in vielen verschiedenen Situationen, von der Abfrage von Informationen über Bilder, Container, Netzwerke und Speicher.

Wie möchten Sie docker inspect verwenden? um Informationen über Ihre eigene Docker-Umgebung abzufragen?


Docker
  1. Installieren Sie ModSecurity mit Apache in einem Docker-Container

  2. Installieren Sie den Wireguard VPN-Server mit Docker

  3. So stellen Sie Microservices mit Docker bereit

  4. So stellen Sie Apps mit Rancher bereit

  5. So verwenden Sie den Docker-Inspect-Befehl

So richten Sie MySQL mit Docker unter Linux ein

Von Docker Compose zu Kubernetes mit Podman

So ersetzen Sie Docker durch Podman auf einem Mac

Bereitstellen eines EFK-Stacks mit Docker

So erhalten Sie die IP-Adresse des Docker-Containers

So konfigurieren Sie Netzwerk-Namespaces in Docker-Containern