Docker kayıt defteri v2'de görüntülerin listesi nasıl alınır


204

Docker kayıt defteri v1 kullanıyorum ve daha yeni bir sürüm olan v2'ye geçmekle ilgileniyorum. Ama ben kayıt defterinde mevcut bir görüntü listesi almak için bir yol gerekir; örneğin v1 kayıt defteri ile bir GET isteği yürütebilir http://myregistry:5000/v1/search?ve sonuç:

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

Ama resmi belgeler üzerinde kayıt defterinde görüntü listesi almak için benzer bir şey bulamıyorum . Herkes yeni sürüm v2 bunu yapmak için bir yol biliyor mu?


Hala yeterli değil. Görüntü oluşturma ve görüntü aktarma tarihlerine ihtiyaç duyun ve umarım önceki etiket sürümlerini dahil edin / bastırın. Gerçek bir web arayüzü de olmalı, değil mi? Yöneticimizle konuşuyorum - sadece 2.0 var
Andrew Wolfe

Yanıtlar:


405

Registry V2'nin en son (2015-07-31) sürümü için bu resmi DockerHub'dan alabilirsiniz:

docker pull distribution/registry:master

Tüm depoları listele (etkili görüntüler):

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

Havuz için tüm etiketleri listele:

curl -X GET https://myregistry:5000/v2/ubuntu/tags/list
> {"name":"ubuntu","tags":["14.04"]}

3
Sertifikayı nereden alıyorsunuz?
duality_

3
@duality, kayıt defterinizin kendinden imzalı bir sertifika veya güvenilmeyen bir kök CA tarafından imzalanmış bir sertifika kullanması durumunda, güvenli bir bağlantı oluşturmak için kıvrılmak üzere sertifikayı sağlamanız gerekir. Güvenli olmayan bir bağlantı kurmak için '--insecure' bayrağını ekleyebilirsiniz.
jonatan

5
-k, --insecure (SSL)
Ilja

9
Varsayılan sonuç yalnızca 100 görüntü kaydını gösterir, ancak daha fazlasını göstermeniz gerekiyorsa, bu sorgu ile sonucu sayfalandırabilirsiniz: http://<registry-url>/v2/_catalog?n=<count>sayımla örneğin 2000.
kikicarbonell

17
Kayıt şifre, kullanımı korunuyorsacurl -u <user>:<pass> -X GET ...
nsantos

77

üzerinde arama yapabilirsin

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


4
... daha yakın zamanda sadece http yerine https'nin gerekli olduğunu eklemek isterim
Nikola

2
Son yüklenen Docker Kayıt Defteri'ne böyle bir ihtiyaç görmüyorum!
Enok82

44

Katalog alın

Varsayılan, kayıt defteri api dönüş katalog 100 giriş, kod var :

Kayıt defteri API'sini kıvırdığınızda:

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

: ile eşdeğerdir

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

Bu bir sayfalandırma yöntemidir.

Girişlerin toplamı 100'ü aştığında iki şekilde yapabilirsiniz:

İlk olarak : daha büyük bir sayı verin

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

Sencond : sonraki bağlayıcı URL'sini ayrıştır

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

Yanıt başlığında bulunan bir bağlantı öğesi:

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

yanıt başlığı:

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

Bağlantı öğesi bu isteğin son girişine sahipse, bir sonraki 'sayfa' için istekte bulunabilirsiniz:

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

Yanıt başlığı bağlantı öğesi içeriyorsa , bunu döngü içinde yapabilirsiniz .

Görsel Al

Kataloğun sonucunu aldığınızda, aşağıdaki gibi:

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

görüntüleri her katalogda alabilirsiniz:

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

İadeler:

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



2
Bu kabul edilen cevap olmalı. Korkunç sayfalara nasıl girdiğinizi açıklayan tek cevap budur. Şu anda kabul edilen cevap (jonatan) yalnızca "a" ile başlayan resimleri gösterir.
user2394284

ve nasıl etiket listesi alırsınız ceph/mds? genel olarak, /- ile /v2/_catalog/ceph/mdt/tags/listçalışmayan herhangi bir depo için - çalışmıyor
tymik


21

Bu amaçla bir CLI aracı yazdık: docker-ls Bir docker kayıt defterine göz atmanızı sağlar ve jeton veya temel kimlik doğrulama yoluyla kimlik doğrulamayı destekler.


21

Bu beni deli ediyor, ama sonunda bütün parçaları bir araya getirdim. 1/25/2015 itibariyle, docker V2 kayıt defterindeki görüntüleri listelemenin mümkün olduğunu doğruladım (tam olarak yukarıda belirtilen @jonatan'da olduğu gibi).

Temsilcim olsaydı, bu cevabı oylatırım.

Bunun yerine cevabı genişleteceğim. Kayıt defteri V2 güvenlik göz önünde bulundurularak yapıldığı için , kendinden imzalı bir sertifika ile nasıl ayarlanacağını ve o sertifika ile bir https çağrısı yapılabilmesi için kapsayıcıyı o sertifika ile nasıl çalıştırmanın uygun olacağını düşünüyorum :

Bu aslında kayıt defterini başlatmak için kullandığım komut dosyasıdır:

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

Bu bazıları için açık olabilir, ama ben her zaman anahtarlar ve certs ile karıştırılır. Call @jonaton'dan ** bahsetmek için referans alınması gereken dosya, yukarıda listelenen domain.crt'dir. (Domain.crt dosyasını koyduğumdan /root, erişilebildiği kullanıcı dizinine bir kopya yaptım.)

curl --cacert ~/domain.crt https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}

** Yukarıdaki komut değiştirildi: -X GET gerçekten denediğimde çalışmadı.

Not: https://myregistry:5000(yukarıdaki gibi) oluşturulan sertifikaya verilen alan adıyla eşleşmelidir.



7

Repos ve ilişkili etiketlerin bir listesini yazdırmak için güzel bir küçük astar (JQ kullanır).

Yüklemediyseniz jqşunları kullanabilirsiniz:brew install jq

# This is my URL but you can use any
REPO_URL=10.230.47.94:443

curl -k -s -X GET https://$REPO_URL/v2/_catalog \
 | jq '.repositories[]' \
 | sort \
 | xargs -I _ curl -s -k -X GET https://$REPO_URL/v2/_/tags/list

Argh, bunu daha sonra yazdım ve seninkini buldum: S ama cevabımı saklayacağım çünkü Temel yetkinin nasıl ele alınacağını gösteriyor ve neden çalıştığını açıklıyor. Ayrıca sonucu düz bir görüntü listesine filtreler.
Craig Ringer

Jq Linux dağıtımınızda değilse, onu alın . Stedolan.github.io/jq/download Çok kullanışlı küçük bir araçtır.
ISQ

5

Burada aynı şeyi yapmak zorunda kaldım ve yukarıdaki işler, yerel bir liman işçisi deposu olduğu için giriş bilgilerini sağlamak zorunda kaldım.

Yukarıdaki gibidir, ancak URL'de kullanıcı adı / şifre girilir.

curl -k -X GET https://yourusername:yourpassword@theregistryURL/v2/_catalog

Biçimlendirilmemiş JSON olarak geri gelir.

Bu formatta olmasını istiyorsanız, insan okuma kolaylığı için python formatlayıcıdan geçtim.

curl -k -X GET https://yourusername:yourpassword@theregistryURL/v2/_catalog | python -m json.tool

4

"/ V2 / _catalog" ve "/ tags / list" uç noktalarını kullanarak tüm resimleri gerçekten listeleyemezsiniz. Birkaç farklı resim eklediyseniz ve bunları "en son" olarak etiketlediyseniz, eski resimleri gerçekten listeleyemezsiniz! Eğer "docker pull ubuntu @ sha256: ac13c5d2 ..." kullanarak onlara başvurursanız onları çekebilirsiniz. Cevap - sadece aynı olmayan etiketleri listeleyebileceğiniz görüntüleri listelemenin bir yolu yok


3

Bazıları bu kadar ileri giderse.

Yukarıda başkalarının söylediklerini almak. İşte cevabı, json olarak biçimlendirilmiş bir metin dosyasına koyan bir astar.

curl "http://mydocker.registry.domain/v2/_catalog?n=2000" | jq . - > /tmp/registry.lst

Bu benziyor

{
  "repositories": [
    "somerepo/somecontiner",
    "somerepo_other/someothercontiner",
 ...
  ]
}

Kaç kabınızla eşleşmesi için?? N = xxxx 'i değiştirmeniz gerekebilir.

Sonraki, eski ve kullanılmayan kapları otomatik olarak kaldırmanın bir yoludur.



2

Görüntüleri çeşitli şekillerde listelemek için kullanımı kolay bir komut satırı aracı yazdım (tüm görüntüleri listelemek, bu görüntülerin tüm etiketlerini listelemek, bu etiketlerin tüm katmanlarını listelemek gibi).

Ayrıca, kullanılmayan görüntüleri tek bir görüntünün yalnızca eski etiketlerini veya tüm görüntüleri vb. Silmek gibi çeşitli yollarla silmenizi sağlar. Bu, kayıt defterinizi bir CI sunucusundan doldururken ve yalnızca en yeni / kararlı sürümleri tutmak istediğinizde kullanışlıdır.

Python ile yazılmıştır ve büyük büyük özel kayıt defteri görüntüleri indirmenize gerek yoktur.


2

Kayıt defterindeki tüm görüntülerin tüm etiketlerini listeleyen bir örnek. HTTP Temel kimlik doğrulaması için yapılandırılmış bir kayıt defterini de işler.

THE_REGISTRY=localhost:5000

# Get username:password from docker configuration. You could
# inject these some other way instead if you wanted.
CREDS=$(jq -r ".[\"auths\"][\"$THE_REGISTRY\"][\"auth\"]" .docker/config.json | base64 -d)

curl -s --user $CREDS https://$THE_REGISTRY/v2/_catalog | \
    jq -r '.["repositories"][]' | \
    xargs -I @REPO@ curl -s --user $CREDS https://$THE_REGISTRY/v2/@REPO@/tags/list | \
    jq -M '.["name"] + ":" + .["tags"][]'

Açıklama:

  • kullanıcı adını çıkar: .docker / config.json şifresi
  • tüm "depoları" listelemek için kayıt defterine bir https isteği yapın
  • json sonucunu depo adlarının düz bir listesine filtreleme
  • her havuz adı için:
  • bu "depo" için tüm "etiketleri" listelemek için kayıt defterine bir https isteği yapın
  • her depoda bulunan her etiket için "depo": "etiket" çiftlerini yazdırarak sonuç json nesnelerinin akışını filtreleyin

1

Bu konu uzun bir zaman öncesine dayanır, en çok kullanılan araçların en önemlisi skopeove crane.

skopeoimzalamayı destekler ve diğer birçok özelliğe sahiptir, ancak cranebiraz daha minimalisttir ve basit bir kabuk komut dosyasına entegre edilmeyi daha kolay buldum.


0

Her kayıt defteri kap olarak çalıştığından, kapsayıcı kimliğinin ilişkili bir günlük dosyası kimliği-json.log vardır, bu günlük dosyası vars.name = [image] ve vars.reference = [tag] öğelerini içerir. Bunları tahmin etmek ve yazdırmak için bir komut dosyası kullanılabilir. Bu belki de V2-2.0.1 kayıt defterine aktarılan görüntüleri listelemek için bir yöntemdir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.