tag library images imagenes hub example dockers container deployment registry docker

deployment - library - download docker image



Docker: compruebe la versiĆ³n de la imagen de registro privado (5)

¿Qué comandos de CLI necesito usar para verificar si la imagen en mi registro de acoplador privado es una versión más nueva que la que se está ejecutando actualmente en mi servidor?

Por ejemplo, tengo un contenedor que ejecuté utilizando docker run -d my.domain.com:5000/project1

y me gustaría saber si está desactualizado.


AFAIK, esto no es posible ahora mismo.

Lo único que veo es sacar el registro para verificar si hay una nueva versión de su imagen (entonces tendría una ID diferente a la imagen almacenada localmente):

docker pull your/image:tag

Pero sí, eso significaría buscar las nuevas imágenes (si las hay).

Si echas un vistazo a la documentación de la API de registro , verás que si no te molesta el guión, puedes obtener esta información sin descargarla, obteniendo las etiquetas de imagen y verificando si la ID devuelta para el la etiqueta coincide con la ID de la imagen local que tiene con la misma etiqueta.

Dicho esto, tener algo para "buscar actualizaciones" integrado en la CLI del docker sería una buena adición.


Brownie señala a @mbarthelemy y @amuino que me pusieron en la pista. A partir de eso, pude elaborar el siguiente script bash que otros pueden encontrarle útil. Solo comprueba si la etiqueta en el registro es diferente del contenedor que se está ejecutando actualmente.

#!/bin/bash # ensure running bash if ! [ -n "$BASH_VERSION" ];then echo "this is not bash, calling self with bash...."; SCRIPT=$(readlink -f "$0") /bin/bash $SCRIPT exit; fi REGISTRY="my.registry.com:5000" REPOSITORY="awesome-project-of-awesomeness" LATEST="`wget -qO- http://$REGISTRY/v1/repositories/$REPOSITORY/tags`" LATEST=`echo $LATEST | sed "s/{//g" | sed "s/}//g" | sed "s//"//g" | cut -d '' '' -f2` RUNNING=`docker inspect "$REGISTRY/$REPOSITORY" | grep Id | sed "s//"//g" | sed "s/,//g" | tr -s '' '' | cut -d '' '' -f3` if [ "$RUNNING" == "$LATEST" ];then echo "same, do nothing" else echo "update!" echo "$RUNNING != $LATEST" fi


Incluso cuando no hay ningún comando, puede usar la API para buscar etiquetas en el registro y compararlas con lo que está ejecutando.

$ curl --silent my.domain.com:5000/v1/repositories//project1/tags | grep latest {"latest": "116f283e4f19716a07bbf48a562588d58ec107fe6e9af979a5b1ceac299c4370"} $ docker images --no-trunc my.domain.com:5000/project1 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE my.domain.com:5000 latest 64d935ffade6ed1cca3de1b484549d4d278a5ca62b31165e36e72c3e6ab8a30f 4 days ago 583.2 MB

Al comparar los id, puede saber que no está ejecutando la última versión.


No sé si esto funciona como se anuncia. Solo un truco rápido que acabo de armar. Pero esto al menos te dará un pequeño impulso sobre cómo se puede hacer esto.

#!/bin/bash container=$1 imageid=$(docker inspect --format ''{{.Config.Image}}'' ${container}) echo "Running version from: $(docker inspect --format ''{{.Created}}'' ${container})" echo "Image version from: $(docker inspect --format ''{{.Created}}'' ${imageid})"

Ejemplo de salida:

[root@server ~]# sh version_check.sh 9e500019b9d4 Running version from: 2014-05-30T08:24:08.761178656Z Image version from: 2014-05-01T16:48:24.163628504Z


No estoy seguro acerca de la version pero si se refiere a la tag de la imagen, se puede verificar fácilmente a través de la API de registro v2 . Tenga en cuenta que, en el contexto de las etiquetas Docker, la etiqueta no tiene nada que ver con la versión del software .

Use el comando curl en CLI

curl <docker_host_ip>:<docker_host_port>/v2/<repository_name>/tags/list

Para obtener una lista de repositorios insertados en el registro privado, use

curl <docker_host_ip>:<docker_host_port>/v2/_catalog