es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Docker: ¿cómo mostrar todas las referencias de una imagen por su identificación?

Conozco el ID de una imagen Docker. Me gustaría listar todas las referencias (nombres) que apunten a esa imagen (incluso si no tiene ninguna referencia en absoluto).

A pesar de que el comando “docker image” tiene muchas capacidades de filtrado, no he encontrado cómo filtrar la salida para restringirla a un solo ID de imagen.

Ejemplo:

$ docker images --no-trunc --filter=reference=alpine:3.12 '--format={{.ID}} {{printf "%s:%-26s" .Repository .Tag}} {{.CreatedAt}}'
sha256:d6e46aa2470df1d32034c6707c8041158b652f38d2a9ae3d7ad7e7532d22ebe0 alpine:3.12 2020-10-22 04:19:24 +0200 CEST

Esperaba que alguno de estos comandos funcionara, pero no lo hacen:

$ docker images --no-trunc '--format={{.|json}}' sha256:d6e46aa2470df1d32034c6707c8041158b652f38d2a9ae3d7ad7e7532d22ebe0 | wc -l
0
$ docker images --no-trunc '--format={{.|json}}' --filter=ID=sha256:d6e46aa2470df1d32034c6707c8041158b652f38d2a9ae3d7ad7e7532d22ebe0
Error de respuesta del daemon: Filtro 'id' no válido

También intenté filtrar con un formato personalizado, pero esto genera una línea vacía para cada imagen que no coincide y esto no es lo que quiero.

docker images --no-trunc '--format={{if eq .ID "sha256:d6e46aa2470df1d32034c6707c8041158b652f38d2a9ae3d7ad7e7532d22ebe0"}}{{.|json}}{{end}}'

Nota: no, no quiero usar “grep” o “sed” porque me gustaría utilizar todo el poder de “–format” para obtener la salida que necesito, y esos comandos no son lo suficientemente portátiles en general.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, parece que no hay una forma directa de enumerar las referencias (nombres) que apuntan a una imagen Docker específica utilizando el comando docker images. Sin embargo, una solución alternativa es utilizar el comando docker inspect con algunas opciones de filtrado y formato para obtener el resultado deseado.

    El siguiente comando lista todas las referencias (nombres) que apuntan a la imagen Docker con el ID sha256:d6e46aa2470df1d32034c6707c8041158b652f38d2a9ae3d7ad7e7532d22ebe0, o indica si no tiene referencias en absoluto:

    $ docker inspect --format="{{range .RepoTags}}{{if eq $.ID \"sha256:d6e46aa2470df1d32034c6707c8041158b652f38d2a9ae3d7ad7e7532d22ebe0\"}}{{.}} {{end}}{{end}}" $(docker images -q)
    

    Explicación del comando:

    • docker images -q: Lista los IDs de todas las imágenes Docker en el sistema.
    • docker inspect: Obtiene información detallada sobre los objetos de Docker, incluyendo imágenes.
    • --format: Especifica una plantilla Go utilizada para formatear la salida.
    • {{range .RepoTags}}: Recorre todas las etiquetas de repositorio (referencias) de la imagen inspeccionada.
    • {{if eq $.ID "sha256:d6e46aa2470df1d32034c6707c8041158b652f38d2a9ae3d7ad7e7532d22ebe0"}}{{.}} {{end}}: Si el ID de imagen inspeccionado coincide con el ID deseado, imprime la etiqueta del repositorio (referencia) seguida de un espacio. Esto filtra efectivamente cualquier referencia no coincidente.
    • $(docker images -q): Pasa los IDs de todas las imágenes Docker en el sistema como argumentos al comando docker inspect, de modo que inspeccione todas las imágenes en un solo comando.

    Ten en cuenta que la salida puede contener duplicados si la misma imagen tiene múltiples etiquetas de repositorio (referencias). Puedes pasar la salida a través de sort -u para eliminar duplicados si es necesario.

Comments are closed.