Получить идентификатор контейнера докера из имени контейнера

112

Какая команда позволяет получить идентификатор контейнера докеров из имени контейнера?

Димитри Коприва
источник
4
Я пытаюсь прямо сейчас, не могу найти ни одного образца в Интернете. спасибо, что проголосовали против, мне нравятся счастливые люди.
Dimitri Kopriwa
Вам следует прочитать « Как спрашивать» и привести минимально воспроизводимый пример . Как выглядит docker --listили похожее? Какая команда создает новый контейнер? и т. д.
fedorqui «ТАК, хватит вредить»
1
Я думаю, что мой вопрос довольно ясен, пожалуйста, проголосуйте, я дам ответ как можно скорее.
Dimitri Kopriwa
1
В bash не существует такой вещи, как «контейнер». Возможно, вы имеете в виду докер- контейнеры? Если это так, люди, наблюдающие за тегом «bash», могут запутаться. однако вы получаете идентификатор контейнера из имени, я уверен, что это настоящая команда и не имеет ничего общего с языком программирования bash.
djhaskin987

Ответы:

197

В Linux:

sudo docker ps -aqf "name=containername"

Или в OS X, Windows:

docker ps -aqf "name=containername"

где containernameимя вашего контейнера.

Чтобы избежать ложных срабатываний, как отмечает @llia Sidorenko, вы можете использовать якоря регулярных выражений следующим образом:

docker ps -aqf "name=^containername$"

объяснение:

  • -qдля тишины. вывод только ID
  • -aдля всех. работает, даже если ваш контейнер не запущен
  • -fдля фильтра .
  • ^имя контейнера должно начинаться с этой строки
  • $имя контейнера должно заканчиваться этой строкой
code_monk
источник
7
Примечание для всех, кто наткнется на это: sudo больше не требуется в linux, если вы добавляете себя в группу
докеров
9
Будьте осторожны с этим ответом, так как name = containername на самом деле является подстановочным знаком и будет соответствовать чему угодно с именем (. *) Containername (. *)
Илья Сидоренко
5
@ekkis использует --no-truncфлаг. sodocker ps --no-trunc -aqf "name=containername"
code_monk
3
По состоянию на 07.01.2019 у меня это не сработало. Использую docker v17.06.0. У docker inspect --format="{{.Id}}" imageNameменя команда работала.
PatS
1
@code_monk, спасибо за подтверждение. Я добавил комментарий к ответу Rosberg Linhares, откуда я получил идею, и предложил изменить его ответ на правильный ответ.
PatS
38

Вы можете попробовать это:

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

Этот подход не зависит от ОС.

Росберг Линьярес
источник
5
Это возвращает IMAGE ID NOT КОНТЕЙНЕР ID
Виджей
2
@vijay, для меня это дает идентификатор контейнера: https://i.ibb.co/BPwyxDj/Docker-Container-Id.png
Rosberg Linhares
Это также дает мне идентификатор контейнера. Полный идентификатор контейнера, а не только усеченные первые 12 символов.
cowlinator
Нравится вот этот! Спасибо. 👍
GollyJer
@vijay @RosbergLinhares, если вы указываете имя контейнера (указанное в NAMESстолбце с docker ps), оно дает идентификатор контейнера. Если вместо этого указано имя изображения (указанное в IMAGEстолбце с docker ps), вместо этого выводится идентификатор изображения.
Вольфсон
12
  1. Получить идентификаторы запущенных контейнеров:

    $docker ps -qf "name=IMAGE_NAME"
    
        -f: Filter output based on conditions provided
        -q: Only display numeric container IDs
    
  2. Получить идентификаторы всех контейнеров:

    $docker ps -aqf "name=IMAGE_NAME"
    
        -a: all containers
    
Кальяни Чаудхари
источник
2
docker ps -fq не сработало, однако сработало docker ps -qf(порядок флагов)
thom_nic 01
4

Следующая команда:

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

Дает такой вывод:

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

Если вы хотите получить полный ContainerId на основе имени контейнера, используйте следующую команду

 docker ps --no-trunc -aqf name=containername
Гирдхар Сингх Ратхор
источник
0

Образ Docker проверить ImageName \ ImageId --format = {{'. ConatinerConfig.Hostname'}}

раджат шукла
источник
Пожалуйста, добавьте пояснение к своему ответу. Ответы, которые представляют собой только код (или в данном случае только команду), бесполезны для новых пользователей, которые могут не понимать, что на самом деле делает команда или код. Поищите в программе Cargo Cult Programme, почему это плохо.
Макс Фоллмер
0

В моем случае я запускал контейнер Docker Tensorflow в Ubuntu 20.04: запустите свой контейнер докеров в одном терминале, я запустил его с

docker run -it od

Затем запустил другой терминал и запустил ниже docker psс помощью sudo:

sudo docker ps

Я успешно получил идентификатор контейнера:

CONTAINER ID        IMAGE               COMMAND             CREATED             
STATUS              PORTS               NAMES
e4ca1ad20b84        od                  "/bin/bash"         18 minutes ago      
Up 18 minutes                           unruffled_stonebraker
Имран
источник
-2

Самый простой способ, который я могу придумать, - это проанализировать вывод docker ps

Давайте запустим последний образ ubuntu в интерактивном режиме и подключимся к нему

docker run -it ubuntu /bin/bash

Если вы запустите docker psдругой терминал, вы увидите что-то вроде

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

К сожалению, разобрать этот формат непросто, поскольку они используют пробелы для ручного выравнивания материала.

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

Вот сценарий, преобразующий вывод в JSON.

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

На самом деле, с выводом работать немного удобнее. Каждое поле имеет ширину 20 символов. [['CONTAINER ID',0],['IMAGE',20],['COMMAND',40],['CREATED',60],['STATUS',80],['PORTS',100],['NAMES',120]]

Грегори Нисбет
источник