Как увидеть дополнительные теги на локальном изображении Docker? - PullRequest
1 голос
/ 27 марта 2019

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

Я теряю теги либо при сборке, сохранении или загрузке изображений докера, и пытаюсь отслеживать состояние своего изображения на каждом шагу. Обратите внимание, что это локальный файл Docker (как на моем ноутбуке), и его нельзя отправить в удаленный репозиторий. Когда я запускаю docker images, я вижу изображение, созданное с помощью одного из тегов, но не все из них.

$ docker build -t my/repo:first_tag
$ docker tag my/repo:first_tag my/repo:second_tag

Когда я запускаю docker images, я вижу только первый тег, показанный как тег .

$ docker images
REPOSITORY     TAG          IMAGE ID     CREATED          SIZE
my/repo        first_tag    abcd1234     6 seconds ago    100MB

Я хотел бы иметь какой-нибудь способ показать это изображение со всеми тегами, что-то вроде:

my/repo:
  first_tag
  second_tag

Существует ли подобная команда, и если да, то что это?

РЕДАКТИРОВАТЬ: Оказывается, я добавлял теги неправильно, и приведенный выше код не является его представителем. То, что я делал, было на самом деле:

$ docker build -t my/repo:first_tag
$ docker tag my/repo:first_tag my/repo

Обратите внимание, что на втором теге нет реального тега. Когда я действительно запускаю код в вопросе, я получаю следующий вывод:

$ docker images
REPOSITORY     TAG          IMAGE ID     CREATED          SIZE
my/repo        second_tag   abcd1234     6 seconds ago    100MB
my/repo        first_tag    abcd1234     6 seconds ago    100MB

1 Ответ

1 голос
/ 27 марта 2019

Если вы хотите перечислить теги для определенного изображения, вы можете запустить:

docker images my/repo --format="{{ .Tag }}"

--format используется здесь только для сохранения интересных столбцов. По умолчанию docker images my/repo возвращает всю информацию о my/repo (хранилище, тег, идентификатор изображения, созданный и размер), как docker images (без фильтрации хранилища).

Редактировать : группировать изображения по тегам

Поскольку --format опции-заполнители ограничены (https://docs.docker.com/engine/reference/commandline/images/#format-the-output),, вы не можете получить доступ к некоторым интересным свойствам как .RepoTags для извлечения всех тегов, связанных с дайджестом изображения. Однако вы можете сделать это, docker inspect выбрав желаемое изображения и использование некоторой оболочки и jq magic (jq - инструмент для манипулирования JSON):

docker images my/repo --format="{{ .ID }}" | \
    sort | uniq | \
    xargs docker inspect | \
    jq -r '.[] | [ .Id, (.RepoTags | join(",")) ] | @csv'

Пояснения:

  • сначала получите все идентификаторы изображений (--format="{{ .ID }}"), связанные с my/repo
  • удалить дубликаты (sort | uniq), если таковые имеются (из-за нескольких тегов для идентификатора изображения)
  • для каждого изображения (xargs), проверьте это изображение (docker inspect):
    • используйте jq, чтобы получить строку типа <id of the image>,<tags related to the image>. Теги, связанные с этим изображением, разделены запятой (join(","))

Пример результата:

"sha256:abcd1234...","my/repo:v1"
"sha256:abcd2345...","my/repo:v2"
"sha256:abcd3456...","my/repo:v3,my/repo:tag"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...