Uzyskaj identyfikator kontenera platformy Docker z nazwy kontenera


112

Jakie jest polecenie pobrania identyfikatora kontenera Dockera z nazwy kontenera?


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

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.


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
    

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`

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

0

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


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

-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]]

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.