Uzyskaj identyfikator kontenera platformy Docker z nazwy kontenera

112

Jakie jest polecenie pobrania identyfikatora kontenera Dockera z nazwy kontenera?

Dimitri Kopriwa
źródło
4
Próbuję teraz, nie mogę znaleźć żadnej próbki online. dziękuję za odrzucenie głosu, lubię szczęśliwych ludzi.
Dimitri Kopriwa
Przeczytaj artykuł Jak pytać i podaj minimalny powtarzalny przykład . Jak wygląda docker --listlub podobnie? Jakie jest polecenie utworzenia nowego kontenera? etc
fedorqui 'SO przestań szkodzić'
1
Myślę, że moje pytanie jest dość jasne, proszę zagłosuj, udzielę odpowiedzi jak najszybciej.
Dimitri Kopriwa
1
W bash nie ma czegoś takiego jak „pojemnik”. Może masz na myśli kontenery docker ? Jeśli tak, osoby oglądające tag „bash” mogą się pomylić. jakkolwiek otrzymujesz identyfikator kontenera z nazwy, jestem pewien, że jest to rzeczywista komenda i nie ma nic wspólnego z językiem programowania bash.
djhaskin987

Odpowiedzi:

196

W systemie Linux:

sudo docker ps -aqf "name=containername"

Lub w OS X, Windows:

docker ps -aqf "name=containername"

gdzie containernamejest nazwa twojego kontenera.

Aby uniknąć fałszywych alarmów, jak zauważa @llia Sidorenko, możesz użyć kotwic wyrażeń regularnych w następujący sposób:

docker ps -aqf "name=^containername$"

wyjaśnienie:

  • -qdla ciszy. wyprowadza tylko ID
  • -adla wszystkich. działa, nawet jeśli kontener nie jest uruchomiony
  • -fdo filtra .
  • ^nazwa kontenera musi zaczynać się od tego ciągu
  • $nazwa kontenera musi kończyć się tym ciągiem
code_monk
źródło
7
uwaga dla każdego, kto się na to natknie: sudo nie jest już wymagane w Linuksie, jeśli dodasz siebie do grupy
docker
9
Uważaj na tę odpowiedź, ponieważ nazwa = nazwa_zbiornika jest w rzeczywistości symbolem wieloznacznym i będzie pasować do wszystkiego, co ma nazwę (. *) Nazwa_zawieracza (. *)
Ilia Sidorenko
5
@ekkis używa --no-truncflagi. więcdocker ps --no-trunc -aqf "name=containername"
code_monk
3
Od 07.01.2019 to nie działa dla mnie. Używam Dockera 17.06.0. Polecenie docker inspect --format="{{.Id}}" imageNamezadziałało dla mnie.
PatS
1
@code_monk, Dzięki za potwierdzenie. Dodałem komentarz do odpowiedzi Rosberga Linharesa, skąd wziąłem pomysł, i zasugerowałem zmianę jego odpowiedzi na poprawną.
PatS
37

Możesz spróbować tego:

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

To podejście jest niezależne od systemu operacyjnego.

Rosberg Linhares
źródło
5
Zwraca to IMAGE ID NOT CONTAINER ID
vijay
2
@vijay, dla mnie to daje identyfikator kontenera: https://i.ibb.co/BPwyxDj/Docker-Container-Id.png
Rosberg Linhares,
To również daje mi identyfikator kontenera. Pełny identyfikator kontenera, a nie tylko obcięte pierwsze 12 znaków.
cowlinator
Kocham tą jedną! Dzięki. 👍
GollyJer
@vijay @RosbergLinhares Jeśli podasz nazwę kontenera (podaną w NAMESkolumnie z docker ps), podasz identyfikator kontenera. Jeśli zamiast tego zostanie podana nazwa obrazu (podana w IMAGEkolumnie z docker ps), zamiast tego zostanie podany identyfikator obrazu.
Wolfson
12
  1. Uzyskaj identyfikatory uruchomionych kontenerów:

    $docker ps -qf "name=IMAGE_NAME"
    
        -f: Filter output based on conditions provided
        -q: Only display numeric container IDs
    
  2. Uzyskaj identyfikatory wszystkich kontenerów:

    $docker ps -aqf "name=IMAGE_NAME"
    
        -a: all containers
    
kalyani chaudhari
źródło
2
docker ps -fq nie zadziałało, ale zadziałało docker ps -qf(kolejność flag)
thom_nic
4

Następujące polecenie:

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

Daje to wyjście:

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`
Sidharth Srivastava
źródło
3

Jeśli chcesz uzyskać pełne ContainerId na podstawie nazwy kontenera, użyj następującego polecenia

 docker ps --no-trunc -aqf name=containername
Girdhar Singh Rathore
źródło
0

Inspekcja obrazu platformy Docker ImageName \ ImageId --format = {{'. ConatinerConfig.Hostname'}}

rajat shukla
źródło
Proszę dodać wyjaśnienie do swojej odpowiedzi. Odpowiedzi zawierające tylko kod (lub w tym przypadku tylko polecenie) nie są pomocne dla nowych użytkowników, którzy mogą nie rozumieć, co właściwie robi polecenie lub kod. Sprawdź programowanie kultowych ładunków, aby dowiedzieć się, dlaczego tak jest.
Max Vollmer
0

W moim przypadku korzystałem z kontenera Docker Tensorflow w Ubuntu 20.04: Uruchom kontener Docker w jednym terminalu, uruchomiłem go z

docker run -it od

A potem uruchomiłem kolejny terminal i uruchomiłem poniżej docker psz sudo:

sudo docker ps

Udało mi się uzyskać identyfikator kontenera:

CONTAINER ID        IMAGE               COMMAND             CREATED             
STATUS              PORTS               NAMES
e4ca1ad20b84        od                  "/bin/bash"         18 minutes ago      
Up 18 minutes                           unruffled_stonebraker
Imran
źródło
-2

Najprostszym sposobem, jaki przychodzi mi do głowy, jest przeanalizowanie danych wyjściowych docker ps

Uruchommy interaktywnie najnowszy obraz Ubuntu i połączmy się z nim

docker run -it ubuntu /bin/bash

Jeśli uruchomisz docker psinny terminal, zobaczysz coś takiego

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

Niestety, analiza tego formatu nie jest łatwa, ponieważ używają spacji do ręcznego wyrównywania rzeczy

$ 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@@@@@@

Oto skrypt, który konwertuje dane wyjściowe do formatu JSON.

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

Właściwie praca z wyjściem jest nieco wygodniejsza. Każde pole ma szerokość 20 znaków. [['CONTAINER ID',0],['IMAGE',20],['COMMAND',40],['CREATED',60],['STATUS',80],['PORTS',100],['NAMES',120]]

Gregory Nisbet
źródło