pricing hub bash docker dockerhub

bash - hub - docker store



Compruebe si la imagen: la combinaciĆ³n de etiquetas ya existe en el hub docker (5)

Aquí hay una función Bash que ayudará:

docker_image_exists() { local image_full_name="$1"; shift local wait_time="${1:-5}" local search_term=''Pulling|is up to date|not found'' local result="$((timeout --preserve-status "$wait_time" docker 2>&1 pull "$image_full_name" &) | grep -v ''Pulling repository'' | egrep -o "$search_term")" test "$result" || { echo "Timed out too soon. Try using a wait_time greater than $wait_time..."; return 1 ;} echo $result | grep -vq ''not found'' }

Ejemplo de uso:

docker_image_exists elifarley/docker-dev-env:alpine-sshd && / echo EXISTS || / echo "Image does not exist"

Como parte de un script bash, quiero comprobar si existe una combinación de imagen: ventana acoplable en particular en el centro de la ventana acoplable. Además, será un repositorio privado.

Es decir, el pseudocódigo sería como:

tag = something if image:tag already exists on docker hub: Do nothing else Build and push docker image with that tag


Esta es la solución que uso con gitlab usando la ventana acoplable: imagen estable.

Asegúrese de que las características experimentales del cliente estén habilitadas:

echo ''{"experimental": "enabled"}'' > ~/.docker/config.json

Esto también sobrescribirá tu configuración. Si esa no es una opción, debe hacerlo manualmente o usar jq , sed o lo que tenga disponible.

Iniciar sesión

docker login -u $USER -p $PASSWORD $REGISTRY

Compruebe si está allí:

docker manifest inspect $IMGNAME:$IMGTAG > /dev/null ; echo $?

la ventana acoplable devolverá 0 en caso de éxito o 1 en caso de fallo.


Estaba luchando para que esto funcionara para un repositorio de concentrador de ventana acoplable privado y finalmente decidí escribir un script ruby, que funciona a partir de hoy. Siéntase libre de usar!

#!/usr/bin/env ruby require ''base64'' require ''net/http'' require ''uri'' def docker_tag_exists? repo, tag auth_string = Base64.strict_encode64 "#{ENV[''DOCKER_USER'']}:#{ENV[''DOCKER_PASSWORD'']}" uri = URI.parse("https://registry.hub.docker.com/v1/repositories/#{repo}/tags/#{tag}") request = Net::HTTP::Get.new(uri) request[''Authorization''] = "Basic #{auth_string}" request[''Accept''] = ''application/json'' request[''Content-Type''] = ''application/json'' response = Net::HTTP.start(request.uri.hostname, request.uri.port, use_ssl: true) do |http| http.request(request) end (response.body == ''Tag not found'') ? 0 : 1 end exit docker_tag_exists? ARGV[0], ARGV[1]

Nota: debe especificar DOCKER_USER y DOCKER_PASSWORD al llamar a esto como ...

DOCKER_USER=XXX DOCKER_PASSWORD=XXX config/docker/docker_hub.rb "NAMESPACE/REPO" "TAG" && echo ''latest''

¡Esta línea imprimirá ''más reciente'', si la autenticación es exitosa y la etiqueta especificada no existe! Estaba usando esto en mi Vagrantfile cuando intentaba buscar una etiqueta basada en la rama de git actual:

git rev-parse --symbolic-full-name --abbrev-ref HEAD


Me gustan las soluciones basadas en docker.

Este oneliner es lo que uso en nuestro IC:

docker run --rm anoxis/registry-cli -l user:password -r registry-url -i docker-name | grep -q docker-tag || echo do something if not found


Por favor, pruebe este

function docker_tag_exists() { curl --silent -f -lSL https://index.docker.io/v1/repositories/$1/tags/$2 > /dev/null } if docker_tag_exists library/nginx 1.7.5; then echo exist else echo not exists fi

Actualizar:

En caso de uso Docker Registry v2 (basado en this ):

# set username and password UNAME="user" UPASS="password" function docker_tag_exists() { TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d ''{"username": "''${UNAME}''", "password": "''${UPASS}''"}'' https://hub.docker.com/v2/users/login/ | jq -r .token) EXISTS=$(curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/$1/tags/?page_size=10000 | jq -r "[.results | .[] | .name == /"$2/"] | any") test $EXISTS = true } if docker_tag_exists library/nginx 1.7.5; then echo exist else echo not exists fi