Отримати ідентифікатор контейнера докера з назви контейнера


111

Яка команда отримує ідентифікатор контейнера докера від імені контейнера?


4
Я намагаюся зараз, не міг знайти жодного зразка в Інтернеті. дякую за голосування, мені подобаються щасливі люди.
Димитрій Копріва

Ви повинні прочитати " Як запитувати" та навести мінімальний приклад, що відтворюється . Як виглядає docker --listабо подібне? Яка команда для створення нового контейнера? і т. д.
fedorqui 'ТАК перестати шкодити'

1
Я думаю, що моє запитання досить чітке, проголосуйте, я дам відповідь якомога швидше.
Димитрій Копріва

1
У баші не існує такого поняття, як "контейнер", про який я знаю. Можливо, ви маєте на увазі контейнери для докерів ? Якщо так, люди, які спостерігають за тегом "bash", можуть заплутатися. однак ви отримуєте ідентифікатор контейнера від імені, я впевнений, що це фактична команда і не має нічого спільного з мовою програмування bash.
djhaskin987

Відповіді:


191

У Linux:

sudo docker ps -aqf "name=containername"

Або в OS X, Windows:

docker ps -aqf "name=containername"

де containernameваша назва контейнера.

Щоб уникнути отримання помилкових спрацьовувань, як зазначає @llia Sidorenko, ви можете використовувати якорі регулярних виразів так:

docker ps -aqf "name=^containername$"

пояснення:

  • -qдля тихого. вивести лише ідентифікатор
  • -aдля усіх. працює, навіть якщо ваш контейнер не запущений
  • -fдля фільтра .
  • ^ім'я контейнера повинно починатися з цього рядка
  • $ім'я контейнера повинно закінчуватися цим рядком

7
примітка для тих, хто натрапляє на це: sudo більше не потрібен в linux, якщо ви додаєте себе до групи докерів (настійно рекомендується)
code_monk

9
Будьте обережні з цією відповіддю, оскільки name = containername насправді є символом підстановки, і воно буде відповідати будь-чому з ім'ям (. *) Ім'я контейнера (. *)
Ilia Sidorenko

5
@ekkis використовують --no-truncпрапор. такdocker 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, Дякуємо за підтвердження. Я додав коментар до відповіді Росберга Лінхареса, звідки я взяв ідею, і запропонував його відповідь змінити на правильну.
PatS

37

Ви можете спробувати це:

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

Цей підхід не залежить від ОС.


5
Це повертає
vijay

2
@vijay, для мене це дає ідентифікатор контейнера: https://i.ibb.co/BPwyxDj/Docker-Container-Id.png
Росберг

Це також дає мені ідентифікатор контейнера. Повний ідентифікатор контейнера, а не лише усічені перші 12 символів.
каулінатор

Любіть це! Дякую. 👍
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

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'}}


Будь ласка, додайте пояснення до своєї відповіді. Відповіді, що мають лише код (або в цьому випадку лише командні), не корисні новим користувачам, які можуть не розуміти, що насправді робить команда або код. Шукайте культове програмування вантажів, чому це погано.
Макс Волмер,

0

У моєму випадку я запускав контейнер Tensorflow Docker в Ubuntu 20.04: Запустіть ваш контейнер Docker в одному терміналі, я запустив його за допомогою

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.