ATUALIZAÇÃO Obrigado pelo conselho de @ degelf. Aqui está o 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}"
Você pode simplesmente criar um novo nome de arquivo dockertags, em / usr / local / bin (ou adicionar um caminho PAT ao seu .bashrc/ .zshrc), e colocar esse código nele. Em seguida, adicione as permissões executáveis ( chmod +x dockertags).
Uso:
dockertags ubuntu ---> lista todas as tags do ubuntu
dockertags php apache ---> lista todas as tags php php que contêm 'apache'
Você pode agrupar tudo em eco [backtick] ...[backtick] para condensar em uma linha. E / ou substitua "debian" por $ 1 e coloque-o em um script chamado "dockertags" em / usr / local / bin. Antes do backtick de fechamento, você pode adicionar | grep $ 2. Depois, chmod + x, e então você pode "dockertags php apache" para ver todas as tags php que contêm apache.
sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'é muito mais limpo escrito #tr -d '[]" '
William Pursell
1
Modifiquei para usar o segundo argumento posicional como nome de usuário: senha, para que eu pudesse trocar o wget por curl e usar a userauth="-u ${2}"permissão ${userauth}(se estiver em branco, sem alternância ou parâmetros). Isto pode ajudar qualquer pessoa usando repo privado é
Com base na informação em 'Marcas subseção nos docs , este GET parece requerer autorização, de modo que o v1 API + sedparece ser realmente simples de usar para uma verificação rápida ...
akavel
3
Se você estiver recebendo um erro "não autorizado", consulte minha resposta alternativa . Nenhuma ofensa à pessoa que postou a resposta original. Tive de tomar medidas adicionais para que a resposta acima funcionasse e queria ajudar os outros.
RobV8R 19/08/1918
23
Se você deseja usar a API do registro do docker v2, ela lista as tags por páginas. Para listar todas as tags de uma imagem, convém adicionar um parâmetro grande page_size ao URL, por exemplo
O Docker Hub parece limitar o tamanho da página a um máximo efetivo de 100.
Shane
2
@ Shane Oh realmente? Não encontrei uma imagem com tantas páginas. Um URL gosta de https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101trabalhar?
A API do Docker V2 requer um token de portador OAuth com as declarações apropriadas. Na minha opinião, a documentação oficial é bastante vaga sobre o assunto. Para que outros não passem pela mesma dor que eu, ofereço a docker-tagsfunção abaixo .
É certo que docker-tagsfaz várias suposições. Especificamente, os parâmetros de solicitação do OAuth são principalmente codificados. Uma implementação mais ambiciosa faria uma solicitação não autenticada ao registro e derivava os parâmetros OAuth da resposta não autenticada.
Observe que image_namenão deve conter detalhes do usuário etc. Por exemplo, se você estiver pressionando a imagem com o nome tutum.co/username/x, image_namedeve estar x.
Qual é o site tutum.co que você diz que devo fornecer a eles meu login e senha do dockerhub?
Nakilon 13/03/19
1
@Nakilon Quando escrevi esta resposta, há vários anos, Tutum era um serviço que fornecia um Registro Docker particular. E eu não estou "dando a eles" minha senha, eu me autentico com o serviço deles usando autenticação básica HTTP padrão por https.
Johan
Tutum não existe mais. Você pode atualizar sua resposta para que as pessoas não enviem suas credenciais acidentalmente para quem possui esse domínio agora?
Obter todas as tags do Docker Hub: esse comando usa o JSONprocessador de linha de comando jqpara selecionar os nomes de tags JSONretornados pelo Docker Hub Registry (as aspas são removidas tr). Substitua a biblioteca pelo nome de usuário do Docker Hub, debian pelo nome da imagem:
curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq .results[].name você vai economizar um comando grep
matson kepson
usando a versão 1:curl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
danilo
1
Fiz isso quando tenho que implementar uma tarefa na qual, se o usuário digitar a tag errada, forneça a lista de todas as tags presentes no repositório (repositório do Docker) presente no registro. Então, eu tenho código no lote Script.
<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>
Portanto, podemos fornecer argumentos para arquivos em lote como:
Eu não acho que isso funcione para imagens do registro. Acabei de receber um "Identificador '<id>' não corresponde a nenhum serviço, nó ou cluster de nó".
5282 Johan
1
No powershell 5.1, eu tenho um script list_docker_image_tags.ps1 simples como este:
Se as pessoas quiserem ler tags do registro RedHat em https://registry.redhat.io/v2, as etapas são:
# 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"[]'
Se você deseja comparar o que você tem no registro openshift local com o registro upstream registry.redhat.com, aqui está um script completo .
docker(1)
github.com/docker/for-linux/issues/455Respostas:
Eu tenho a resposta daqui . Muito obrigado! :)
Apenas um script de uma linha: (encontre todas as tags do debian)
ATUALIZAÇÃO Obrigado pelo conselho de @ degelf. Aqui está o script de shell.
Você pode simplesmente criar um novo nome de arquivo
dockertags
, em / usr / local / bin (ou adicionar um caminho PAT ao seu.bashrc
/.zshrc
), e colocar esse código nele. Em seguida, adicione as permissões executáveis (chmod +x dockertags
).Uso:
dockertags ubuntu
---> lista todas as tags do ubuntudockertags php apache
---> lista todas as tags php php que contêm 'apache'fonte
...
[backtick] para condensar em uma linha. E / ou substitua "debian" por $ 1 e coloque-o em um script chamado "dockertags" em / usr / local / bin. Antes do backtick de fechamento, você pode adicionar | grep $ 2. Depois, chmod + x, e então você pode "dockertags php apache" para ver todas as tags php que contêm apache.wget -q https://registry.hub.docker.com/v1/repositories/circleci/ruby/tags -O - | jq -r '.[].name'
se você tiverjq
instaladosed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'
é muito mais limpo escrito #tr -d '[]" '
userauth="-u ${2}"
permissão${userauth}
(se estiver em branco, sem alternância ou parâmetros). Isto pode ajudar qualquer pessoa usando repo privado éA partir do Docker Registry V2,
GET
basta:Veja documentos para mais.
fonte
sed
parece ser realmente simples de usar para uma verificação rápida ...Se você deseja usar a API do registro do docker v2, ela lista as tags por páginas. Para listar todas as tags de uma imagem, convém adicionar um parâmetro grande page_size ao URL, por exemplo
fonte
https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101
trabalhar?java
imagem é um bom exemplo. Sim, você pode fazer coisas como registry.hub.docker.com/v2/repositories/library/java/tags/… . Veja os linksnext
eprevious
no resultado para exemplos.A API do Docker V2 requer um token de portador OAuth com as declarações apropriadas. Na minha opinião, a documentação oficial é bastante vaga sobre o assunto. Para que outros não passem pela mesma dor que eu, ofereço a
docker-tags
função abaixo .A versão mais recente do
docker-tags
pode ser encontrada no meu GitHubGist: "Listar tags de imagem do Docker usando o bash" .A função docker-tags depende da jq . Se você está jogando com JSON, provavelmente já o possui.
Exemplo
É certo que
docker-tags
faz várias suposições. Especificamente, os parâmetros de solicitação do OAuth são principalmente codificados. Uma implementação mais ambiciosa faria uma solicitação não autenticada ao registro e derivava os parâmetros OAuth da resposta não autenticada.fonte
arr=("$@")
. Basta escreverdocker-tags() { for item; do ....
Eu consegui fazê-lo funcionar usando curl:
Observe que
image_name
não deve conter detalhes do usuário etc. Por exemplo, se você estiver pressionando a imagem com o nometutum.co/username/x
,image_name
deve estarx
.fonte
Com base na resposta de Yan Foto (a API v2 ), criei um script Python simples para listar as tags para uma determinada imagem .
Uso:
Resultado:
fonte
Se a ferramenta de análise JSON,
jq
estiver disponívelfonte
'.[].name'
no matches found: .[].name
. Mas funciona bem no bash, talvez seja o seu shell padrão?jq
comandoConsulte Utilitário CLI: https://www.npmjs.com/package/docker-browse
Permite a enumeração de tags e imagens.
docker-browse tags <image>
listará todas as tags da imagem. por exemplodocker-browse tags library/alpine
docker-browse images
listará todas as imagens no registro. Não está disponível atualmente paraindex.docker.io
.Você pode conectá-lo a qualquer registro, incluindo o seu particular, desde que ele suporte a API HTTP V2 do Docker Registry
fonte
Para visualizar todas as tags disponíveis em um navegador:
https://registry.hub.docker.com/v1/repositories/<username>/<image_name>/tags
ou seja, https://hub.docker.com/r/localstack/localstack/tags
Ou, você pode obter uma resposta json usando este terminal:
https://registry.hub.docker.com/v1/repositories/localstack/localstack/tags
fonte
Você também pode usar este recado:
& Anexar o seguinte (como está):
Tornar executável:
Finalmente tente por:
[Espero que você esteja ciente de $ & # antes de executar qualquer comando]
fonte
Você pode usá-lo se o seu ambiente não tiver 'jq', =)
fonte
Obter todas as tags do Docker Hub: esse comando usa o
JSON
processador de linha de comandojq
para selecionar os nomes de tagsJSON
retornados pelo Docker Hub Registry (as aspas são removidastr
). Substitua a biblioteca pelo nome de usuário do Docker Hub, debian pelo nome da imagem:fonte
Aqui está um script do Powershell que escrevi para o Windows. Manipula os repositórios v1 e v2:
Get-DockerImageVersions.ps1:
fonte
Você pode conseguir executando no terminal isso:
Além disso, se você não tiver jq, precisará instalá-lo
fonte
curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq .results[].name
você vai economizar um comando grepcurl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
Fiz isso quando tenho que implementar uma tarefa na qual, se o usuário digitar a tag errada, forneça a lista de todas as tags presentes no repositório (repositório do Docker) presente no registro. Então, eu tenho código no lote Script.
Portanto, podemos fornecer argumentos para arquivos em lote como:
fonte
A API do Docker Registry tem um terminal para listar todas as tags .
Parece que Tutum tem um ponto de extremidade semelhante , bem como uma maneira de acessar via tutum-cli .
Com o tutum-cli, tente o seguinte:
fonte
No powershell 5.1, eu tenho um script list_docker_image_tags.ps1 simples como este:
Então eu posso grep para 4,7 tags como este:
fonte
Você pode listar todas as tags com o skopeo .
Para registros externos:
fonte
Se as pessoas quiserem ler tags do registro RedHat em
https://registry.redhat.io/v2
, as etapas são:Se você deseja comparar o que você tem no registro openshift local com o registro upstream registry.redhat.com, aqui está um script completo .
fonte