Я думаю, что мой вопрос довольно ясен, пожалуйста, проголосуйте, я дам ответ как можно скорее.
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для всех. работает, даже если ваш контейнер не запущен
Примечание для всех, кто наткнется на это: 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, откуда я получил идею, и предложил изменить его ответ на правильный ответ.
Это также дает мне идентификатор контейнера. Полный идентификатор контейнера, а не только усеченные первые 12 символов.
cowlinator
Нравится вот этот! Спасибо. 👍
GollyJer
@vijay @RosbergLinhares, если вы указываете имя контейнера (указанное в NAMESстолбце с docker ps), оно дает идентификатор контейнера. Если вместо этого указано имя изображения (указанное в IMAGEстолбце с docker ps), вместо этого выводится идентификатор изображения.
Вольфсон
12
Получить идентификаторы запущенных контейнеров:
$docker ps -qf "name=IMAGE_NAME"
-f: Filter output based on conditions provided
-q: Only display numeric container IDs
Получить идентификаторы всех контейнеров:
$docker ps -aqf "name=IMAGE_NAME"
-a: all containers
Пожалуйста, добавьте пояснение к своему ответу. Ответы, которые представляют собой только код (или в данном случае только команду), бесполезны для новых пользователей, которые могут не понимать, что на самом деле делает команда или код. Поищите в программе 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
На самом деле, с выводом работать немного удобнее. Каждое поле имеет ширину 20 символов.
[['CONTAINER ID',0],['IMAGE',20],['COMMAND',40],['CREATED',60],['STATUS',80],['PORTS',100],['NAMES',120]]
docker --list
или похожее? Какая команда создает новый контейнер? и т. д.Ответы:
В Linux:
Или в OS X, Windows:
где
containername
имя вашего контейнера.Чтобы избежать ложных срабатываний, как отмечает @llia Sidorenko, вы можете использовать якоря регулярных выражений следующим образом:
объяснение:
-q
для тишины. вывод только ID-a
для всех. работает, даже если ваш контейнер не запущен-f
для фильтра .^
имя контейнера должно начинаться с этой строки$
имя контейнера должно заканчиваться этой строкойисточник
--no-trunc
флаг. sodocker ps --no-trunc -aqf "name=containername"
docker inspect --format="{{.Id}}" imageName
меня команда работала.Вы можете попробовать это:
Этот подход не зависит от ОС.
источник
NAMES
столбце сdocker ps
), оно дает идентификатор контейнера. Если вместо этого указано имя изображения (указанное вIMAGE
столбце сdocker ps
), вместо этого выводится идентификатор изображения.Получить идентификаторы запущенных контейнеров:
Получить идентификаторы всех контейнеров:
источник
docker ps -fq
не сработало, однако сработалоdocker ps -qf
(порядок флагов)Следующая команда:
Дает такой вывод:
источник
Если вы хотите получить полный ContainerId на основе имени контейнера, используйте следующую команду
источник
Образ Docker проверить ImageName \ ImageId --format = {{'. ConatinerConfig.Hostname'}}
источник
В моем случае я запускал контейнер Docker Tensorflow в Ubuntu 20.04: запустите свой контейнер докеров в одном терминале, я запустил его с
Затем запустил другой терминал и запустил ниже
docker ps
с помощью sudo:Я успешно получил идентификатор контейнера:
источник
Самый простой способ, который я могу придумать, - это проанализировать вывод
docker ps
Давайте запустим последний образ ubuntu в интерактивном режиме и подключимся к нему
Если вы запустите
docker ps
другой терминал, вы увидите что-то вродеК сожалению, разобрать этот формат непросто, поскольку они используют пробелы для ручного выравнивания материала.
Вот сценарий, преобразующий вывод в JSON.
https://gist.github.com/mminer/a08566f13ef687c17b39
На самом деле, с выводом работать немного удобнее. Каждое поле имеет ширину 20 символов.
[['CONTAINER ID',0],['IMAGE',20],['COMMAND',40],['CREATED',60],['STATUS',80],['PORTS',100],['NAMES',120]]
источник