Holen Sie sich die Docker-Container-ID aus dem Containernamen


110

Wie lautet der Befehl, um die Docker-Container-ID aus dem Containernamen abzurufen?


4
Ich versuche es gerade, konnte online keine Probe finden. Danke für die Abstimmung, ich mag glückliche Menschen.
Dimitri Kopriwa

Sie sollten How to Ask lesen und ein minimal reproduzierbares Beispiel bereitstellen . Wie sieht docker --listoder ähnliches aus? Was ist der Befehl zum Erstellen eines neuen Containers? etc
fedorqui 'SO hör auf zu schaden'

1
Ich denke, meine Frage ist ziemlich klar. Bitte stimmen Sie ab. Ich werde die Antwort so schnell wie möglich geben.
Dimitri Kopriwa

1
Es gibt keinen "Container", den ich in Bash kenne. Vielleicht meinst du Docker- Container? Wenn ja, könnten Leute, die das "Bash" -Tag sehen, verwirrt werden. Wie auch immer Sie die Container-ID aus dem Namen erhalten, ich bin sicher, dass es sich um einen tatsächlichen Befehl handelt und nichts mit der Bash-Programmiersprache zu tun hat.
Djhaskin987

Antworten:


189

Unter Linux:

sudo docker ps -aqf "name=containername"

Oder in OS X, Windows:

docker ps -aqf "name=containername"

Wo containernameist dein Containername?

Um Fehlalarme zu vermeiden, können Sie, wie @llia Sidorenko feststellt, Regex-Anker wie folgt verwenden:

docker ps -aqf "name=^containername$"

Erläuterung:

  • -qfür ruhig. Geben Sie nur die ID aus
  • -afür alle. funktioniert auch, wenn Ihr Container nicht läuft
  • -ffür Filter .
  • ^Containername muss beginnen mit dieser Zeichenfolge
  • $Der Containername muss mit dieser Zeichenfolge enden

7
Ein Hinweis für alle, die darauf stoßen: sudo wird unter Linux nicht mehr benötigt, wenn Sie sich der Docker-Gruppe hinzufügen (sehr zu empfehlen)
code_monk

9
Bitte seien Sie vorsichtig mit dieser Antwort, da Name = Containername eigentlich ein Platzhalter ist und alles mit Name (. *) Containername (. *) Übereinstimmt
Ilia Sidorenko

5
@ekkis verwenden die --no-truncFlagge. sodocker ps --no-trunc -aqf "name=containername"
code_monk

3
Ab dem 07.01.2019 hat dies bei mir nicht funktioniert. Ich verwende Docker v17.06.0. Der Befehl docker inspect --format="{{.Id}}" imageNamehat bei mir funktioniert.
PatS

1
@code_monk, Danke für die Bestätigung. Ich habe der Antwort von Rosberg Linhares einen Kommentar hinzugefügt, von dem ich auf die Idee gekommen bin, und vorgeschlagen, seine Antwort in die richtige Antwort zu ändern.
PatS

37

Sie können dies versuchen:

docker inspect --format="{{.Id}}" container_name

Dieser Ansatz ist vom Betriebssystem unabhängig.


5
Dies gibt IMAGE ID NOT CONTAINER ID zurück
Vijay

2
@ Vijay, für mich gibt dies die Container-ID: https://i.ibb.co/BPwyxDj/Docker-Container-Id.png
Rosberg Linhares

Dies gibt mir auch die Container-ID. Die vollständige Container-ID, nicht nur die abgeschnittenen ersten 12 Zeichen.
Cowlinator

Ich liebe diesen! Vielen Dank. 👍
GollyJer

@vijay @RosbergLinhares Wenn Sie den Namen des Containers angeben (in der NAMESSpalte mit angegeben docker ps), wird die Container-ID angegeben. Wenn stattdessen der Bildname (in der IMAGESpalte mit angegeben docker ps) angegeben wird, wird stattdessen die Bild-ID ausgegeben .
Wolfson

12
  1. Container-IDs von laufenden Containern abrufen ::

    $docker ps -qf "name=IMAGE_NAME"
    
        -f: Filter output based on conditions provided
        -q: Only display numeric container IDs
    
  2. Container-IDs aller Container abrufen ::

    $docker ps -aqf "name=IMAGE_NAME"
    
        -a: all containers
    

2
docker ps -fq funktionierte jedoch docker ps -qfnicht (Reihenfolge der Flaggen)
thom_nic

4

Der folgende Befehl:

docker ps --format 'CONTAINER ID : {{.ID}} | Name: {{.Names}} | Image:  {{.Image}} |  Ports: {{.Ports}}'

Gibt diese Ausgabe:

CONTAINER ID : d8453812a556 | Name: peer0.ORG2.ac.ae | Image:  hyperledger/fabric-peer:1.4 |  Ports: 0.0.0.0:27051->7051/tcp, 0.0.0.0:27053->7053/tcp
CONTAINER ID : d11bdaf8e7a0 | Name: peer0.ORG1.ac.ae | Image:  hyperledger/fabric-peer:1.4 |  Ports: 0.0.0.0:17051->7051/tcp, 0.0.0.0:17053->7053/tcp
CONTAINER ID : b521f48a3cf4 | Name: couchdb1 | Image:  hyperledger/fabric-couchdb:0.4.15 |  Ports: 4369/tcp, 9100/tcp, 0.0.0.0:5985->5984/tcp
CONTAINER ID : 14436927aff7 | Name: ca.ORG1.ac.ae | Image:  hyperledger/fabric-ca:1.4 |  Ports: 0.0.0.0:7054->7054/tcp
CONTAINER ID : 9958e9f860cb | Name: couchdb | Image:  hyperledger/fabric-couchdb:0.4.15 |  Ports: 4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp
CONTAINER ID : 107466b8b1cd | Name: ca.ORG2.ac.ae | Image:  hyperledger/fabric-ca:1.4 |  Ports: 0.0.0.0:7055->7054/tcp
CONTAINER ID : 882aa0101af2 | Name: orderer1.o1.ac.ae | Image:  hyperledger/fabric-orderer:1.4 |  Ports: 0.0.0.0:7050->7050/tcp`enter code here`

3

Wenn Sie eine vollständige Container-ID basierend auf dem Containernamen erhalten möchten, verwenden Sie den folgenden Befehl

 docker ps --no-trunc -aqf name=containername

0

Docker-Image inspizieren ImageName \ ImageId --format = {{'. ConatinerConfig.Hostname'}}


Bitte fügen Sie Ihrer Antwort eine Erklärung hinzu. Antworten, die nur Code (oder in diesem Fall nur Befehl) sind, sind für neue Benutzer nicht hilfreich, die möglicherweise nicht verstehen, was der Befehl oder Code tatsächlich tut. Suchen Sie in der Frachtkult-Programmierung nach, warum dies schlecht ist.
Max Vollmer

0

In meinem Fall habe ich den Tensorflow Docker-Container in Ubuntu 20.04 ausgeführt: Führen Sie Ihren Docker-Container in einem Terminal aus, mit dem ich ihn ausgeführt habe

docker run -it od

Und dann startete ein anderes Terminal und lief unten docker psmit sudo:

sudo docker ps

Ich habe erfolgreich die Container-ID erhalten:

CONTAINER ID        IMAGE               COMMAND             CREATED             
STATUS              PORTS               NAMES
e4ca1ad20b84        od                  "/bin/bash"         18 minutes ago      
Up 18 minutes                           unruffled_stonebraker

-2

Der einfachste Weg, den ich mir vorstellen kann, besteht darin, die Ausgabe von zu analysieren docker ps

Lassen Sie uns das neueste Ubuntu-Image interaktiv ausführen und eine Verbindung herstellen

docker run -it ubuntu /bin/bash

Wenn Sie docker psin einem anderen Terminal laufen , können Sie so etwas sehen

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
8fddbcbb101c        ubuntu:latest       "/bin/bash"         10 minutes ago      Up 10 minutes                           gloomy_pasteur

Leider ist das Parsen dieses Formats nicht einfach, da Leerzeichen zum manuellen Ausrichten verwendet werden

$ sudo docker ps | sed -e 's/ /@/g'
CONTAINER@ID@@@@@@@@IMAGE@@@@@@@@@@@@@@@COMMAND@@@@@@@@@@@@@CREATED@@@@@@@@@@@@@STATUS@@@@@@@@@@@@@@PORTS@@@@@@@@@@@@@@@NAMES
8fddbcbb101c@@@@@@@@ubuntu:latest@@@@@@@"/bin/bash"@@@@@@@@@13@minutes@ago@@@@@@Up@13@minutes@@@@@@@@@@@@@@@@@@@@@@@@@@@gloomy_pasteur@@@@@@

Hier ist ein Skript, das die Ausgabe in JSON konvertiert.

https://gist.github.com/mminer/a08566f13ef687c17b39

Tatsächlich ist die Ausgabe etwas bequemer. Jedes Feld ist 20 Zeichen breit. [['CONTAINER ID',0],['IMAGE',20],['COMMAND',40],['CREATED',60],['STATUS',80],['PORTS',100],['NAMES',120]]

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.