ACTUALIZACIÓN Gracias por el consejo de @degelf. Aquí está el script de shell.
#!/bin/bash
if [ $# -lt 1 ]
then
cat << HELP
dockertags -- list all tags for a Docker image on a remote registry.
EXAMPLE:
- list all tags for ubuntu:
dockertags ubuntu
- list all php tags containing apache:
dockertags php apache
HELP
fi
image="$1"
tags=`wget -q https://registry.hub.docker.com/v1/repositories/${image}/tags -O - | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}'`
if [ -n "$2" ]
then
tags=` echo "${tags}" | grep "$2" `
fi
echo "${tags}"
Puede crear un nuevo nombre de archivo dockertags, debajo de / usr / local / bin (o agregar un PATH env a su .bashrc/ .zshrc), y poner ese código en él. Luego agregue los permisos ejecutables ( chmod +x dockertags).
Uso:
dockertags ubuntu ---> enumera todas las etiquetas de ubuntu
dockertags php apache ---> enumera todas las etiquetas php php que contienen 'apache'
Puede envolver todo en eco [retroceso] ...[retroceso] para condensarlo en una línea. Y / o reemplace "debian" con $ 1 y póngalo en un script llamado "dockertags" en / usr / local / bin. Luego, antes del cierre, puede agregar | grep $ 2. Luego chmod + x it, y luego puedes ir a "dockertags php apache" para ver todas las etiquetas php que contienen apache.
sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'está mucho más limpiamente escritotr -d '[]" '
William Pursell
1
Modifiqué para usar el segundo argumento posicional como nombre de usuario: contraseña para poder cambiar wget por curl y usar userauth="-u ${2}"permitiéndome ${userauth}(si está en blanco, no alternar ni params). Esto podría ayudar a cualquiera que use repositorios privados
MrMesees
79
A partir de Docker Registry V2, GETbasta con un simple :
Sobre la base de la información en la subsección Etiquetas en la documentación , esta GET parece requerir la autorización, por lo que la API v1 + sedparece ser en realidad más simple de usar para una comprobación rápida ...
akavel
3
Si recibe un error "no autorizado", consulte mi respuesta alternativa . Sin ofender a la persona que publicó la respuesta original. Tuve que tomar medidas adicionales para que la respuesta anterior funcionara y quería ayudar a otros.
RobV8R
23
Si desea utilizar la API de Docker Registry v2, enumera las etiquetas por páginas. Para enumerar todas las etiquetas de una imagen, es posible que desee agregar un parámetro de tamaño de página grande a la URL, por ejemplo
Docker Hub parece limitar el tamaño de página a un máximo efectivo de 100.
Shane
2
@ Shane Oh, ¿en serio? No he encontrado una imagen con tantas páginas. ¿A una url le gusta el https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101trabajo?
La API de Docker V2 requiere un token portador de OAuth con las notificaciones correspondientes. En mi opinión, la documentación oficial es bastante vaga sobre el tema. Para que otros no pasen por el mismo dolor que yo, ofrezco la siguiente docker-tagsfunción.
Es cierto que docker-tagshace varias suposiciones. Específicamente, los parámetros de solicitud de OAuth están en su mayoría codificados. Una implementación más ambiciosa haría una solicitud no autenticada al registro y derivaría los parámetros OAuth de la respuesta no autenticada.
Tenga en cuenta que image_nameno debe contener detalles del usuario, etc. Por ejemplo, si está presionando una imagen con nombre tutum.co/username/x, image_namedebería estarlo x.
¿Qué es este sitio web tutum.co que usted dice que debería darles mi nombre de usuario y contraseña de Dockerhub?
Nakilon
1
@Nakilon Cuando escribí esta respuesta, hace varios años, Tutum era un servicio que proporcionaba un registro privado de Docker. Y no estoy "dándoles" mi contraseña, me autentico con su servicio utilizando la autenticación básica HTTP estándar a través de https.
Johan
El tutum ya no existe. ¿Puedes actualizar tu respuesta para que la gente no envíe accidentalmente sus credenciales a quien sea el propietario de ese dominio ahora?
Obtenga todas las etiquetas de Docker Hub: este comando utiliza el JSONprocesador de línea de comandos jqpara seleccionar los nombres de etiqueta de los JSONdevueltos por el Registro de Docker Hub (las comillas se eliminan con tr). Reemplace la biblioteca con el nombre de usuario de Docker Hub, debian con el nombre de la imagen:
curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq .results[].name le ahorrará un comando grep
Matson kepson
usando la versión 1:curl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
danilo
1
He hecho esto cuando tengo que implementar una tarea en la que si el usuario de alguna manera escribe la etiqueta incorrecta, entonces tenemos que dar la lista de todas las etiquetas presentes en el repositorio (repositorio de Docker) presente en el registro. Así que tengo código en secuencia de comandos por lotes.
<html>
<pre style="background-color:#bcbbbb;">
@echo off
docker login --username=xxxx --password=xxxx
docker pull %1:%2
IF NOT %ERRORLEVEL%==0 (
echo "Specified Version is Not Found "
echo "Available Version for this image is :"
for /f %%i in (' curl -s -H "Content-Type:application/json" -X POST -d "{\"username\":\"user\",\"password\":\"password\"}" https://hub.docker.com/v2/users/login ^|jq -r .token ') do set TOKEN=%%i
curl -sH "Authorization: JWT %TOKEN%" "https://hub.docker.com/v2/repositories/%1/tags/" | jq .results[].name
)
</pre>
</html>
Entonces, en esto podemos dar argumentos para el archivo por lotes como:
No creo que esto funcione para imágenes de registro. Acabo de recibir un "Identificador '<id>' no coincide con ningún servicio, nodo o cluster de nodo".
Johan
1
En powershell 5.1, tengo un script simple list_docker_image_tags.ps1 como este:
Si la gente quiere leer las etiquetas del registro de RedHat, https://registry.redhat.io/v2entonces los pasos son:
# example nodejs-12 image
IMAGE_STREAM=nodejs-12
REDHAT_REGISTRY_API="https://registry.redhat.io/v2/rhel8/$IMAGE_STREAM"# Get an oAuth token based on a service account username and password https://access.redhat.com/articles/3560571
TOKEN=$(curl --silent -u "$REGISTRY_USER":"$REGISTRY_PASSWORD""https://sso.redhat.com/auth/realms/rhcc/protocol/redhat-docker-v2/auth?service=docker-registry&client_id=curl&scope=repository:rhel:pull"| jq --raw-output '.token')# Grab the tags
wget -q --header="Accept: application/json"--header="Authorization: Bearer $TOKEN"-O -"$REDHAT_REGISTRY_API/tags/list"| jq -r '."tags"[]'
Si desea comparar lo que tiene en su registro de OpenShift local con lo que está en el registro ascendente.redhat.com, aquí hay un script completo .
docker(1)
github.com/docker/for-linux/issues/455Respuestas:
Tengo la respuesta de aquí . ¡Muchas gracias! :)
Solo script de una línea: (encuentre todas las etiquetas de debian)
ACTUALIZACIÓN Gracias por el consejo de @degelf. Aquí está el script de shell.
Puede crear un nuevo nombre de archivo
dockertags
, debajo de / usr / local / bin (o agregar un PATH env a su.bashrc
/.zshrc
), y poner ese código en él. Luego agregue los permisos ejecutables (chmod +x dockertags
).Uso:
dockertags ubuntu
---> enumera todas las etiquetas de ubuntudockertags php apache
---> enumera todas las etiquetas php php que contienen 'apache'fuente
...
[retroceso] para condensarlo en una línea. Y / o reemplace "debian" con $ 1 y póngalo en un script llamado "dockertags" en / usr / local / bin. Luego, antes del cierre, puede agregar | grep $ 2. Luego chmod + x it, y luego puedes ir a "dockertags php apache" para ver todas las etiquetas php que contienen apache.wget -q https://registry.hub.docker.com/v1/repositories/circleci/ruby/tags -O - | jq -r '.[].name'
si hajq
instaladosed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'
está mucho más limpiamente escritotr -d '[]" '
userauth="-u ${2}"
permitiéndome${userauth}
(si está en blanco, no alternar ni params). Esto podría ayudar a cualquiera que use repositorios privadosA partir de Docker Registry V2,
GET
basta con un simple :Ver documentos para más.
fuente
sed
parece ser en realidad más simple de usar para una comprobación rápida ...Si desea utilizar la API de Docker Registry v2, enumera las etiquetas por páginas. Para enumerar todas las etiquetas de una imagen, es posible que desee agregar un parámetro de tamaño de página grande a la URL, por ejemplo
fuente
https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101
trabajo?java
imagen es un buen ejemplo. Sí, puede hacer cosas como Registry.hub.docker.com/v2/repositories/library/java/tags/… . Vea los enlacesnext
yprevious
en el resultado para ver ejemplos.La API de Docker V2 requiere un token portador de OAuth con las notificaciones correspondientes. En mi opinión, la documentación oficial es bastante vaga sobre el tema. Para que otros no pasen por el mismo dolor que yo, ofrezco la siguiente
docker-tags
función.La versión más reciente de
docker-tags
se puede encontrar en mi GitHubGist: "Listar etiquetas de imagen de Docker usando bash" .La función docker-tags depende de jq . Si estás jugando con JSON, es probable que ya lo tengas.
Ejemplo
Es cierto que
docker-tags
hace varias suposiciones. Específicamente, los parámetros de solicitud de OAuth están en su mayoría codificados. Una implementación más ambiciosa haría una solicitud no autenticada al registro y derivaría los parámetros OAuth de la respuesta no autenticada.fuente
arr=("$@")
. Solo escribedocker-tags() { for item; do ....
Me las arreglé para que funcione usando curl:
Tenga en cuenta que
image_name
no debe contener detalles del usuario, etc. Por ejemplo, si está presionando una imagen con nombretutum.co/username/x
,image_name
debería estarlox
.fuente
Sobre la base de la respuesta de Yan Foto (la api v2 ), creé un script simple de Python para enumerar las etiquetas de una imagen determinada .
Uso:
Salida:
fuente
Si la herramienta de análisis JSON
jq
está disponiblefuente
'.[].name'
no matches found: .[].name
. Pero funciona bien en bash, ¿tal vez es tu shell predeterminado?jq
comandoConsulte la utilidad CLI: https://www.npmjs.com/package/docker-browse
Permite la enumeración de etiquetas e imágenes.
docker-browse tags <image>
enumerará todas las etiquetas para la imagen. p.ejdocker-browse tags library/alpine
docker-browse images
enumerará todas las imágenes en el registro. Actualmente no disponible paraindex.docker.io
.Puede conectarlo a cualquier registro, incluido el privado, siempre que sea compatible con Docker Registry HTTP API V2
fuente
Para ver todas las etiquetas disponibles en un navegador:
https://registry.hub.docker.com/v1/repositories/<username>/<image_name>/tags
es decir, https://hub.docker.com/r/localstack/localstack/tags
O bien, puede obtener una respuesta json utilizando este punto final:
https://registry.hub.docker.com/v1/repositories/localstack/localstack/tags
fuente
También puedes usar este scrap:
& Añadir lo siguiente (como está):
Hazlo ejecutable:
Entonces finalmente intente con:
[Espero que esté al tanto de $ & # antes de ejecutar cualquier comando]
fuente
Puede usarlo si su env no tiene 'jq', =)
fuente
Obtenga todas las etiquetas de Docker Hub: este comando utiliza el
JSON
procesador de línea de comandosjq
para seleccionar los nombres de etiqueta de losJSON
devueltos por el Registro de Docker Hub (las comillas se eliminan contr
). Reemplace la biblioteca con el nombre de usuario de Docker Hub, debian con el nombre de la imagen:fuente
Aquí hay un script de Powershell que escribí para Windows. Maneja repositorios v1 y v2:
Get-DockerImageVersions.ps1:
fuente
Puede lograrlo ejecutando en la terminal esto:
Además, si no tiene jq, debe instalarlo
fuente
curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq .results[].name
le ahorrará un comando grepcurl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
He hecho esto cuando tengo que implementar una tarea en la que si el usuario de alguna manera escribe la etiqueta incorrecta, entonces tenemos que dar la lista de todas las etiquetas presentes en el repositorio (repositorio de Docker) presente en el registro. Así que tengo código en secuencia de comandos por lotes.
Entonces, en esto podemos dar argumentos para el archivo por lotes como:
fuente
La API de registro de Docker tiene un punto final para enumerar todas las etiquetas .
Parece que Tutum tiene un punto final similar , así como una forma de acceder a través de tutum-cli .
Con el tutum-cli, intente lo siguiente:
fuente
En powershell 5.1, tengo un script simple list_docker_image_tags.ps1 como este:
Entonces puedo buscar 4.7 etiquetas como esta:
fuente
Puede enumerar todas las etiquetas con skopeo .
Para registros externos:
fuente
Si la gente quiere leer las etiquetas del registro de RedHat,
https://registry.redhat.io/v2
entonces los pasos son:Si desea comparar lo que tiene en su registro de OpenShift local con lo que está en el registro ascendente.redhat.com, aquí hay un script completo .
fuente