it-swarm.com.de

Entfernen Sie das markierte Docker-Image aus der privaten Registrierung

Wie kann ich ein versehentlich hinzugefügtes Tag aus einem Bild in einer privaten Docker-Registrierung löschen? Die Option -rmi scheint in Docker 1.9.1 für Remote-Images nicht zu funktionieren.

[email protected]:~$ docker --version  
Docker version 1.9.1, build a34a1d5

[email protected]:~$ docker search myregistry:5000/user/image
NAME                                                                     
myregistry:5000/user/image:20160119                                         
myregistry:5000/user/image:20160119-20160120        

[email protected]:~$ 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]
10
user3105453

Es scheint keine einfache Methode zu geben, um Bilder aus der Registrierung zu entfernen, und es scheint, als wäre dies eine Funktion für die Registrierung 2.1 Meilenstein .

Eine der Optionen, die wir heute haben, funktioniert damit nicht

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

ist es manuell aus der Registrierung selbst zu entfernen. Um zu vermeiden, dass versehentlich falsche Dateien entfernt werden, habe ich sie mit dieses Skript von github getestet. Ich übernehme keine Garantie dafür, wie dieses Skript funktioniert (obwohl ich es schnell überprüft habe, bevor ich es getestet habe).

Also habe ich einen Test gemacht und das scheint zu funktionieren :)

[1] Ich gehe davon aus, dass Sie eine Registrierung mit Docker selbst ausführen.

[[email protected] 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
[[email protected] remove-registry]$ 

[2] Ich habe eine minimale Docker-Datei mit nur FROM Alpine Inhalt erstellt und Alpine: v1 erstellt und in meine private Registrierung verschoben, die auf localhost: 5000 ausgeführt wird. Beim Abfragen aus der Registrierung wurde es wie erwartet zurückgegeben.

[[email protected] remove-registry]$ curl -X GET localhost:5000/v2/Alpine/tags/list
{"name":"Alpine","tags":["v1"]}
[[email protected] remove-registry]$ 

[3] Dann logge ich mich mit docker exec In die Registrierung ein und überprüfe die Festplattennutzung, bevor ich mein Experiment durchführe

[email protected]:/# du -sch /var/lib/registry/                     
2.5M    /var/lib/registry/
2.5M    total
[email protected]:/# 

[4] Nachdem ich zu meinem Host zurückgekehrt war, kopierte ich eine schwere Datei (mongodb.tgz) in meinen Container und erstellte eine erstellte und gepusste Version v2.

[[email protected] 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
[[email protected] 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
[[email protected] remove-registry]$ 

[5] Nach erneuter Überprüfung der Größe in der Registrierung wurde diese auf 62 MB erhöht:

[email protected]:/# du -sch /var/lib/registry/                                                                               
62M /var/lib/registry/
62M total
[email protected]:/# 

[6] Um delete_docker_registry_image Ausführen zu können, müssen Sie das Skript in den Container laden, in dem sich die Registrierung befindet. Eine Möglichkeit hierfür ist Curl. Außerdem benötigt dieses Skript jq.

[email protected]:/# apt-get update && apt-get install -y curl jq
...
[email protected]:/#

[7] Führen Sie das Skript aus, versuchen Sie es zuerst mit der Option --dry-run Und vergessen Sie nicht das Versions-Tag (in diesem Fall v2). Es gibt auch einen guten -h

[email protected]:/# 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
[email protected]:/# delete_docker_registry_image --image Alpine:v2          
[email protected]:/#

[8] Und voila !!

[email protected]:/# du -sch /var/lib/registry/                     
2.5M    /var/lib/registry/
2.5M    total
[email protected]:/#  
9
Maniankara

Ich bin erst kürzlich selbst darauf gestoßen, habe dann aber gedacht, warum löschen, ich werde nur eine ältere Version erneut veröffentlichen:

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

Das kaputte Bild wird immer noch da sein, aber es ist unwahrscheinlich, dass jemand es verwenden wird, da eine "neuere" Version verfügbar ist. Natürlich ist es besser, vorwärts zu reparieren, aber zur Not ist dies eine schnelle Lösung.

Wenn der Grund, warum Sie es löschen möchten, darin besteht, dass es Geheimnisse oder etwas Enthülltes enthält, das Sie nicht herausholen wollten, sind die anderen Lösungen besser. Nehmen Sie jedoch an, was auch immer jetzt bekannt ist, und ändern Sie es (Passwörter, Schlüssel, was auch immer).

0
DanielM

Ich bin mir nicht sicher, ob das hilft oder nicht. Aber bitte schauen Sie sich meinen Vorschlag hier an (Kommentar von mphanikumars)

https://github.com/docker/docker-registry/issues/988

0
Phani Kumar