Python Array-Zugriff: Immer der selbe Wert, logisch eigentlich unmöglich...

Hoeze

Lieutenant
Registriert
Juni 2010
Beiträge
707
Hi,
ich hab mir ein simples Python-Script gebastelt, das mir alte Docker-Images löschen soll und bin dabei auf ein echt seltsames Problem gestoßen:
Code:
def rm_image(id):
        print(id)
        subprocess.call(["docker", "rmi", id])
Ergebnis:
298f365265e6c926cee161aedd80752df69bc1d7815c671b5a6d350a405e9fd9
Error response from daemon: No such id: 241638916c42bde9d23f2d2aa4cb4833d82e3ed176c2ed1d2acbcb2858912ef5
2015/04/11 15:24:23 Error: failed to remove one or more images
1e81c682176a8dd24439e29721280a95e8ff4681b275553f16cb2e683cb34e9b
Error response from daemon: No such id: 241638916c42bde9d23f2d2aa4cb4833d82e3ed176c2ed1d2acbcb2858912ef5
2015/04/11 15:24:23 Error: failed to remove one or more images
8712ac3b7ba822665629adf2207ab4341d8f7d301fd05424656dea15637aead7
Error response from daemon: No such id: 241638916c42bde9d23f2d2aa4cb4833d82e3ed176c2ed1d2acbcb2858912ef5
2015/04/11 15:24:23 Error: failed to remove one or more images
c9fa20ecce8811da9de8b1f14bd96a73d534904efb1e77f8b892cc286ca34d59
Error response from daemon: No such id: 241638916c42bde9d23f2d2aa4cb4833d82e3ed176c2ed1d2acbcb2858912ef5
2015/04/11 15:24:23 Error: failed to remove one or more images
 
Woher bekommst du "id"?
 
rm_image(linesplit[2])

Ich führe im Prinzip "docker images --no-trunc" aus und splitte jede Zeile.
linesplit[2] enthält dann die jeweiligen ID's, die ich löschen möchte, als String.
 
Also wenn du schon Hilfe von uns erwartest, dann solltest du ein bisschen mehr Informationen liefern und dir nicht alles aus der Nase ziehen lassen.

1) Wie sieht dein gesamter Code aus
2) Wie steht genau in linesplit?
3) Wie sieht die Ausgabe von "docker images --no-trunc" aus.
 
Code:
#!/bin/bash

repos=$(docker images | awk '{print $1}' | tail -n +2 | sort -u)

for r in $repos; do
        if [[ "$r" == "<none>" ]]; then
                for id in $(docker images | grep $r | awk '{print $3}'); do
                        docker rmi $id
                done
        else
                for id in $(docker images | grep $r | awk '{print $3}' | tail -n +2); do
                        docker rmi -f $id
                done
        fi
done
 
@Tumbleweed:
Danke, aber leider hilft mir dein Bashscript nur bedingt weiter, weil ich auswählen möchte, welche Images genau gelöscht werden.

stwe schrieb:
1) Wie sieht dein gesamter Code aus
2) Wie steht genau in linesplit?
3) Wie sieht die Ausgabe von "docker images --no-trunc" aus.

rmall.py
Code:
#!/usr/bin/python3

import sys
import re
import docker_images

repo = sys.argv[1]
output = docker_images.getAll()
split = output.splitlines()

for line in split:
        #print(line)
        linesplit =  re.split(r'\s+', line)
        if linesplit[0] == repo:
#               print(line)
                print(linesplit[2])
                docker_images.rm_image(linesplit[2])

docker_images
Code:
#!/usr/bin/python3

import shlex
import subprocess

def rm_image(id):
        subprocess.call(["docker", "rmi", id])

def getAll():
        return subprocess.Popen(shlex.split("docker images --no-trunc"), stdout=subprocess.PIPE).communicate()[0].decode("UTF-8")

Beide Dateien liegen im selben Ordner.

docker images --no-trunc
Code:
REPOSITORY             TAG                 IMAGE ID                                                           CREATED             VIRTUAL SIZE
<none>                 <none>              298f365265e6c926cee161aedd80752df69bc1d7815c671b5a6d350a405e9fd9   7 days ago          750.9 MB
temp/owncloud          04.04.15_01-45-29   68cc4fdc2f85ce2a673999e4781e5fa0ced07831ab3a667ac652ff5d5af13f4c   7 days ago          480.1 MB
temp/owncloud          latest              68cc4fdc2f85ce2a673999e4781e5fa0ced07831ab3a667ac652ff5d5af13f4c   7 days ago          480.1 MB
local/apache2          latest              e69da953841c945c5d17965f27022b1fd3163401a911ed317227d3cef304fcdc   7 days ago          479 MB




EDIT:

Vergesst es: Ich glaub nicht, dass Python das Problem ist, sondern Docker:
# docker rmi 298f365265e6c926cee161aedd80752df69bc1d7815c671b5a6d350a405e9fd9
Error response from daemon: No such id: 241638916c42bde9d23f2d2aa4cb4833d82e3ed176c2ed1d2acbcb2858912ef5
2015/04/11 19:20:26 Error: failed to remove one or more images

Anscheinend will Docker mich nur ver*rschen...
 
Zuletzt bearbeitet:
Zurück
Oben