visual studio microsoft español descargar community bash docker

bash - studio - ¿Cómo verificar si una imagen de Docker con una etiqueta específica existe localmente?



visual studio installer (8)

Me gustaría saber si una imagen de Docker con una etiqueta específica existe localmente. Estoy bien usando un script bash si el cliente Docker no puede hacer esto de forma nativa.

Solo para proporcionar algunas sugerencias para un script de bash potencial, el resultado de ejecutar el comando docker images devuelve lo siguiente:

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE rabbitmq latest e8e654c05c91 5 weeks ago 143.5 MB busybox latest 8c2e06607696 6 weeks ago 2.433 MB rabbitmq 3.4.4 a4fbaad9f996 11 weeks ago 131.5 MB


Con la ayuda de la respuesta de Vonc anterior, creé el siguiente script de bash llamado check.sh :

#!/bin/bash image_and_tag="$1" image_and_tag_array=(${image_and_tag//:/ }) if [[ "$(docker images ${image_and_tag_array[0]} | grep ${image_and_tag_array[1]} 2> /dev/null)" != "" ]]; then echo "exists" else echo "doesn''t exist" fi

Usarlo para una imagen existente y la etiqueta imprimirá exists , por ejemplo:

./check.sh rabbitmq:3.4.4

Usarlo para una imagen no existente y la etiqueta se imprimirá doesn''t exist , por ejemplo:

./check.sh rabbitmq:3.4.3


En caso de que esté tratando de buscar una imagen de acoplador desde un registro de acoplador, creo que la forma más fácil de verificar si hay una imagen de acoplador es mediante el servicio de lista de etiquetas API REST de Docker V2

Ejemplo:-

curl $CURLOPTS -H "Authorization: Bearer $token" "https://hub.docker.com:4443/v2/your-repo-name/tags/list"

Si el resultado anterior devuelve 200Ok con una lista de etiquetas de imagen, entonces sabemos que la imagen existe

{"name":"your-repo-name","tags":["1.0.0.1533677221","1.0.0.1533740305","1.0.0.1535659921","1.0.0.1535665433","latest"]}

si ves algo como

{"errors":[{"code":"NAME_UNKNOWN","message":"repository name not known to registry","detail":{"name":"your-repo-name"}}]}

entonces sabes con seguridad que la imagen no existe.


Por lo general, pruebo el resultado de las docker images -q del docker images -q (como en este script ):

if [[ "$(docker images -q myimage:mytag 2> /dev/null)" == "" ]]; then # do something fi

Pero docker images solo toman REPOSITORY como parámetro, necesitaría grep en la etiqueta, sin usar -q .

docker images Docker ahora toman etiquetas (docker 1.8+) [REPOSITORY[:TAG]]

El otro enfoque mencionado a continuación es usar Docker Inspect .
Pero con docker 17+, la sintaxis de las imágenes es: docker image inspect (en una imagen inexistente, el estado de salida será distinto de 0 )


Pruebe docker inspect , por ejemplo:

$ docker inspect --type=image treeder/hello.rb:nada Error: No such image: treeder/hello.rb:nada []

Pero ahora con una imagen que existe, obtendrá un montón de información, por ejemplo:

$ docker inspect --type=image treeder/hello.rb:latest [ { "Id": "85c5116a2835521de2c52f10ab5dda0ff002a4a12aa476c141aace9bc67f43ad", "Parent": "ecf63f5eb5e89e5974875da3998d72abc0d3d0e4ae2354887fffba037b356ad5", "Comment": "", "Created": "2015-09-23T22:06:38.86684783Z", ... } ]

Y está en un buen formato json.


Puedes usar lo siguiente:

$ docker image pull busybox:latest latest: Pulling from library/busybox Digest: sha256:32f093055929dbc23dec4d03e09dfe971f5973a9ca5cf059cbfb644c206aa83f Status: Image is up to date for busybox:latest $ docker image inspect busybox:latest >/dev/null 2>&1 && echo yes || echo no yes

O:

$ docker image rm busybox:latest Untagged: busybox:latest Untagged: busybox@sha256:32f093055929dbc23dec4d03e09dfe971f5973a9ca5cf059cbfb644c206aa83f $ docker image inspect busybox:latest >/dev/null 2>&1 && echo yes || echo no no


Solo un poco de mi parte para muy buenos lectores:

Construir

#!/bin/bash -e docker build -t smpp-gateway smpp (if [ $(docker ps -a | grep smpp-gateway | cut -d " " -f1) ]; then / echo $(docker rm -f smpp-gateway); / else / echo OK; / fi;); docker run --restart always -d --network="host" --name smpp-gateway smpp-gateway:latest

Reloj

docker logs --tail 50 --follow --timestamps smpp-gateway

correr

sudo docker exec -it / $(sudo docker ps | grep "smpp-gateway:latest" | cut -d " " -f1) / /bin/bash


Usando test

if test ! -z "$(docker images -q <name:tag>)"; then echo "Exist" fi

o en una línea

test ! -z "$(docker images -q <name:tag>)" && echo exist