Como obter uma lista de imagens no registro do docker v2

Estou a usar o registo v1 do docker e estou interessado em migrar para a versão mais recente, v2. Mas preciso de alguma forma de obter uma lista de imagens presentes no registo; por exemplo, com o registo v1 posso executar um pedido de obtenção de http://myregistry:5000/v1/search? e o resultado é:

{
  "num_results": 2,
  "query": "",
  "results": [
    {
      "description": "",
      "name": "deis/router"
    },
    {
      "description": "",
      "name": "deis/database"
    }
  ]
}

mas não consigo encontrar na documentação oficial algo semelhante para obter uma lista de imagens no registo. Alguém sabe como fazê-lo na nova versão v2?

Author: Efren, 2015-07-06

13 answers

Para a última versão (a partir de 2015-07-31) do registo V2, pode obter esta imagem do DockerHub:

docker pull distribution/registry:master

Lista todos os repositórios (efectivamente imagens):

curl -X GET https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}

Lista todas as marcas de um repositório:

curl -X GET https://myregistry:5000/v2/ubuntu/tags/list
> {"name":"ubuntu","tags":["14.04"]}
 230
Author: jonatan, 2017-07-25 10:50:08

Podes procurar em

Http://<ip/hostname>:<port>/v2/_catalog

 47
Author: Abhishek Jaiswal, 2017-02-14 07:31:27

Arranja catálogos

Por omissão, a api do registo devolve 100 entradas do catálogo, existe o código :

Quando se fecha a api do registo:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

É equivalente com:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=100

Isto é uma paginação.

Quando a soma das entradas para além de 100, você pode fazer de duas maneiras:

Primeiro : dá um número maior

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=2000

Sencond : analisa o próximo linker url

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

Um elemento de ligação contido no cabeçalho de resposta:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

Cabeçalho da resposta:

Link: </v2/_catalog?last=pro-octopus-ws&n=100>; rel="next"

O elemento link tem a última entrada deste pedido, então você pode solicitar a próxima 'página':

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?last=pro-octopus-ws

Se o cabeçalho de resposta contiver link , você pode fazê-lo num laço .

Obter Imagens

Quando se obtém o resultado do catálogo, é como

{ "repositories": [ "busybox", "ceph/mds" ] }

Pode obter as imagens em todos os catálogos.

curl --cacert domain.crt https://your.registry:5000/v2/busybox/tags/list

O

Devolve:

{"name":"busybox","tags":["latest"]}

 23
Author: litanhua, 2017-03-24 06:39:25

A última versão do registo Docker disponível em https://github.com/docker/distribution suporta a API do catálogo. (v2 / _catalog). Isto permite a capacidade de pesquisar repositórios

Se estiver interessado, pode tentar o registo de imagens do docker CLI que construí para facilitar a utilização das funcionalidades de pesquisa na distribuição do novo registo do Docker ( https://github.com/vivekjuneja/docker_registry_cli)

 21
Author: ZephyrPLUSPLUS, 2015-07-28 11:27:58
Isto tem-me deixado louco, mas finalmente juntei todas as peças. A partir de 1/25/2015, eu confirmei que é possível listar as imagens no registro do docker V2 ( exatamente como @jonatan mencionou, acima. ) ([5]) votaria a favor dessa resposta, se tivesse a reputação de o fazer. Em vez disso, vou expandir a resposta. Uma vez que o registro V2 é feito com segurança em mente, eu acho que é apropriado incluir como configurá-lo com um certificado autossignado, e executar o contentor com esse certificado para que lhe possa ser feita uma chamada https com esse certificado:

Este é o script que eu realmente uso para iniciar o Registro:

sudo docker stop registry
sudo docker rm -v registry
sudo docker run -d \
  -p 5001:5001 \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /data/registry:/var/lib/registry \
  -v /root/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ 
  -e REGISTRY_HTTP_DEBUG_ADDR=':5001' \
  registry:2.2.1
Isto pode ser óbvio para alguns, mas misturo-me sempre com chaves e certs. O arquivo que precisa ser referenciado para fazer a chamada @jonaton menciona acima**, é o domínio.crt listado acima. (Desde que coloquei domínio.crt in /root, eu fiz uma cópia para o diretório de usuário onde ele poderia ser acessado. )
curl --cacert ~/domain.crt https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}

* * a o comando acima foi alterado: - X GET realmente não funcionou quando eu tentei.

Nota: https://myregistry:5000 (como acima ) deve corresponder ao Domínio dado ao certificado gerado.

 17
Author: Cognitiaclaeves, 2017-11-07 18:53:34

Por favor veja a resposta de @jonathan abaixo , ou os documentos da API do registro aqui: https://docs.docker.com/registry/spec/api/

Se procurar por "listagem" verá que o suporte foi adicionado na versão {[[0]}.

 14
Author: Andy, 2017-11-16 17:04:14

Instalar o registo:2.1. 1 ou mais tarde (poderá verificar o último, Aqui ) e usar o GET /v2/_catalog para obter a lista.

Https://github.com/docker/distribution/blob/master/docs/spec/api.md#listing-repositories

Listar todas as imagens por exemplo de script da linha de comandos: https://gist.github.com/OndrejP/a2386d08e5308b0776c0

 9
Author: Ondrej Prochazka, 2017-01-26 22:26:25
Se alguém chegar até aqui.

Tomando o que outros já disseram acima. Aqui está um liner que coloca a resposta em um arquivo de texto formatado, json.

curl "http://mydocker.registry.domain/v2/_catalog?n=2000" | jq . - > /tmp/registry.lst
Isto parece ...
{
  "repositories": [
    "somerepo/somecontiner",
    "somerepo_other/someothercontiner",
 ...
  ]
}
Talvez precises de mudar o'?n = xxxx ' para corresponder a quantos contentores tem.

A seguir é uma forma de remover automaticamente os recipientes antigos e não utilizados.

 2
Author: nelaaro, 2018-07-19 08:51:19

A funcionalidade do registo de pesquisa V2 do Docker não é suportada de momento no momento desta escrita. Ver discussão desde fevereiro de 2015: "propose registry search functionality #206" https://github.com/docker/distribution/issues/206

Escrevi um guião que podes encontrar: https://github.com/BradleyA/Search-docker-registry-v2-script.1.0 Não é bonito, mas recebe a informação necessária do registro privado.

 1
Author: Bradley Allen, 2016-02-12 23:21:35

Escrevi uma ferramenta fácil de usar da linha de comandos para listar imagens de várias formas (como listar todas as imagens, listar todas as marcas dessas imagens, listar todas as camadas dessas marcas).

Também lhe permite apagar as imagens não utilizadas de várias formas, como por exemplo apagar apenas as marcas mais antigas de uma única imagem ou de todas as imagens, etc. Isto é conveniente quando você está preenchendo seu registro a partir de um servidor de CI e quer manter apenas as versões mais recentes/estáveis.

Está escrito em python e não precisa de TI para transferir grandes e volumosas imagens de Registo personalizadas.

 1
Author: anoxis, 2017-02-11 18:39:29

Eu tinha que fazer o mesmo aqui e os trabalhos acima, exceto que eu tinha que fornecer detalhes de login como era um repositório de docker local.

É como para o acima, mas com o fornecimento do nome de utilizador/Senha no URL.

curl -k -X GET https://yourusername:yourpassword@theregistryURL/v2/_catalog
Parece um JSON sem forma.

Eu piped it through the python formatter for ease of human reading, in case you would like to have it in this format.

curl -k -X GET https://yourusername:yourpassword@theregistryURL/v2/_catalog | python -m json.tool
 1
Author: chai, 2018-09-13 05:14:54

Uma vez que cada registo funciona como um contentor, o identificador do contentor tem um ficheiro de registo associado ID-json.registar este ficheiro de registo contém o vars.name = [imagem] e vars.reference=[tag]. Um script pode ser usado para extrapolar e imprimir estes. Este é talvez um método para listar imagens empurradas para o registro V2-2.0.1.

 0
Author: Phil Pinkerton, 2015-08-05 17:51:08