etiketli Docker resmini özel kayıt defterinden kaldır


10

Özel bir Docker kayıt defterindeki bir resimden yanlışlıkla eklenmiş bir etiketi nasıl silebilirim? -Rmi seçeneği Docker 1.9.1'deki uzak görüntüler için çalışmıyor gibi görünüyor.

user@ubuntu-user:~$ docker --version  
Docker version 1.9.1, build a34a1d5

user@ubuntu-user:~$ docker search myregistry:5000/user/image
NAME                                                                     
myregistry:5000/user/image:20160119                                         
myregistry:5000/user/image:20160119-20160120        

user@ubuntu-user:~$ docker rmi myregistry:5000/user/image:20160119-20160120
Error response from daemon: could not find image: no such id: myregistry:5000/user/image:20160119-20160120
Error: failed to remove images: [myregistry:5000/user/image:20160119-20160120]

Yanıtlar:


9

Bugün itibariyle kayıt defterinden görüntüleri kaldırmak için basit bir yöntem gibi görünüyor ve onun 2,1 kilometre taşı kayıt için bir özellik gibi görünüyor .

Bu işe yaramazken bugün sahip olduğumuz seçeneklerden biri

anovil@ubuntu-anovil remove-registry]$ curl -X DELETE localhost:5000/v2/alpine/manifests/v1
{"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]}
[anovil@ubuntu-anovil remove-registry]$ 

el ile kayıt defterinden kaldırmaktır. Yanlışlıkla yanlış dosyayı kaldırmaktan kaçınmak için , github'dan bu komut dosyasıyla test ettim . Bu komut dosyasının nasıl çalıştığına dair hiçbir garanti almıyorum (test etmeden önce hızlı bir şekilde kontrol ettim).

Bu yüzden bir test yaptım ve işe yarıyor gibi görünüyor :)

[1] Sanırım, liman işçisinin kendisi ile bir kayıt çalıştırıyorsunuz.

[anovil@ubuntu-anovil remove-registry]$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
88f8e1a1d7a7        registry:2          "/bin/registry /etc/d"   37 minutes ago      Up 37 minutes       0.0.0.0:5000->5000/tcp   registry
[anovil@ubuntu-anovil remove-registry]$ 

[2] Sadece FROM alpineiçerikle minimal bir Dockerfile oluşturdum ve alpine: v1 oluşturdum ve localhost: 5000 üzerinde çalışan özel kayıt defterime geçtim . Kayıt defterinden sorgulandığında, beklendiği gibi döndü.

[anovil@ubuntu-anovil remove-registry]$ curl -X GET localhost:5000/v2/alpine/tags/list
{"name":"alpine","tags":["v1"]}
[anovil@ubuntu-anovil remove-registry]$ 

[3] Sonra denememle kayıt defterine giriş docker execyapıp disk kullanımını kontrol ettim

root@88f8e1a1d7a7:/# du -sch /var/lib/registry/                     
2.5M    /var/lib/registry/
2.5M    total
root@88f8e1a1d7a7:/# 

[4] Sunucuma geri döndükten sonra, kabıma ağır bir dosya (mongodb.tgz) kopyaladım ve yerleşik ve itilmiş bir sürüm v2 oluşturdum.

[anovil@ubuntu-anovil remove-registry]$ docker build -t localhost:5000/alpine:v2 .
Sending build context to Docker daemon 61.99 MB
Step 1 : FROM alpine
 ---> 2314ad3eeb90
Step 2 : COPY mongodb.tgz /mongodb.tgz
 ---> d7c7645a3fe2
Successfully built d7c7645a3fe2
[anovil@ubuntu-anovil remove-registry]$ docker push localhost:5000/alpine:v2
The push refers to a repository [localhost:5000/alpine] (len: 1)
d7c7645a3fe2: Pushed 
5ff05309724e: Image already exists 
v2: digest: sha256:7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774 size: 4467
[anovil@ubuntu-anovil remove-registry]$ 

[5] Kayıt defterindeki boyutu tekrar kontrol ettikten sonra 62 MB'a yükseldi:

root@88f8e1a1d7a7:/# du -sch /var/lib/registry/                                                                               
62M /var/lib/registry/
62M total
root@88f8e1a1d7a7:/# 

[6] Çalıştırmak delete_docker_registry_imageiçin, komut dosyasını kayıt defterini barındıran kapsayıcıya almanız gerekir, bunu yapmak için bir seçenek kıvrılmadır. Ayrıca, bu komut dosyası gerektirir jq.

root@88f8e1a1d7a7:/# apt-get update && apt-get install -y curl jq
...
root@88f8e1a1d7a7:/#

[7] Betiği çalıştırın, --dry-runönce seçeneği deneyin ve sürüm etiketini unutmayın (bu durumda v2), ayrıca iyi bir şey var-h

root@88f8e1a1d7a7:/# delete_docker_registry_image --image alpine:v2 --dry-run
DRY_RUN: would have deleted tag directory: repositories/alpine/_manifests/tags/v2
DRY_RUN: would have deleted manifest revision: repositories/alpine/_manifests/revisions/sha256/7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774
DRY_RUN: would have deleted directory: blobs/sha256/e2/e2cc9aed084e01fa5cf93c09121035ac4d712113425ae68b678c28591beec5c6
DRY_RUN: would have deleted directory: blobs/sha256/7a/7ada67971e952e353ab14d8f9bdd4e41e4c41099b05a5da09f2700b51d93908a
DRY_RUN: would have deleted directory: blobs/sha256/7b/7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774
DRY_RUN: would have deleted layer metadata directory: repositories/alpine/_layers/sha256/e2cc9aed084e01fa5cf93c09121035ac4d712113425ae68b678c28591beec5c6
root@88f8e1a1d7a7:/# delete_docker_registry_image --image alpine:v2          
root@88f8e1a1d7a7:/#

[8] Ve işte !!

root@88f8e1a1d7a7:/# du -sch /var/lib/registry/                     
2.5M    /var/lib/registry/
2.5M    total
root@88f8e1a1d7a7:/#  


0

Son zamanlarda bunu kendim koştum, ama sonra neden sildiğimi düşündüm, sadece eski bir sürümü yeniden yayınlayacağım:

docker push my/image:1.0.0
docker push my/image:1.0.1 # This is broken

docker tag  my/image:1.0.0 my/image:1.0.2
docker push my/image:1.0.2

Kırık görüntü hala orada olacak, ancak mevcut "yeni" bir sürüm olduğu için herkesin kullanması pek olası değil. Açıkçası düzeltmek daha iyidir, ancak bir tutamda bu hızlı bir çözümdür.

Silmek istemenizin sebebi, sırları veya dışarı çıkmak istemediğiniz bir şeyi ortaya çıkarmasıysa, diğer çözümler daha iyidir, ancak şimdi bilindiği her şeyi varsayalım ve değiştirin (şifreler, anahtarlar, her neyse).


1
Böylece daha fazla görüntü itildikçe ancak hiç temizlenmediği için gerekli depolama alanı büyür ve büyür?
emmdee

@emmdee iyi yani evet ... ama unutmayın, disk-bilge sadece revizyonlar arasındaki deltaları depolar, tıpkı git gibi. 1 GB boyutunda olan bir resim için, yeni bir sürümü her yayınladığınızda diskte kullanılan başka bir 1 GB olduğu anlamına gelmez.
Michael Butler
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.