From cfc92becb2605d67a7391c43261e698d0fdd57bd Mon Sep 17 00:00:00 2001 From: xiadanni Date: Fri, 15 Jan 2021 15:37:42 +0800 Subject: [PATCH] docker: delete image reference when failed to get image configuration to avoid docker pull error according to patch 0110-docker-Fix-can-t-pull-image-while-the-image-i.patch, if the layers of image has been damaged, image reference should be deleted from repositories.json to avoid docker pull failed. however, when imageStore.Get failed, isExist flag has not been set to false, which cause the image reference has still not been deleted, only warning is printed. flood warnings printed every time user restarts docker daemon, like: Jan 15 14:09:52 localhost dockerd[3952467]: time="2021-01-15T14:09:52.705664179+08:00" level=warning msg="Failed to get image configration for image id sha256:d0a015ffac5ba3b9d2a641de56b3b2ed24409b7082c7811ebac4c2f4977b0965, error: failed to get digest sha256:d0a015ffac5ba3b9d2a641de56b3b2ed24409b7082c7811ebac4c2f4977b0965: open /var/lib/docker/image/devicemapper/imagedb/content/sha256/d0a015ffac5ba3b9d2a641de56b3b2ed24409b7082c7811ebac4c2f4977b0965: no such file or directory" so we fix the logic, delete image reference when failed to get image configuration. Signed-off-by: xiadanni --- components/engine/daemon/daemon.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/components/engine/daemon/daemon.go b/components/engine/daemon/daemon.go index e826f6a..ed268d2 100644 --- a/components/engine/daemon/daemon.go +++ b/components/engine/daemon/daemon.go @@ -1097,11 +1097,10 @@ func NewDaemon(ctx context.Context, config *config.Config, pluginStore *plugin.S return nil, err } - // delete reference of image not nornamlly loaded to imageStore - var isExist bool + // delete reference of image not normally loaded to imageStore for _, imageID := range rs.List() { + isExist := false if img, err := imageStore.Get(image.ID(imageID)); err == nil { - isExist = false if chainID := img.RootFS.ChainID(); chainID != "" { l, err := layerStores[runtime.GOOS].Get(chainID) if err == nil { @@ -1112,7 +1111,7 @@ func NewDaemon(ctx context.Context, config *config.Config, pluginStore *plugin.S isExist = true } } else { - logrus.Warnf("Failed to get image configration for image id %s, error: %s", imageID, err) + logrus.Warnf("Failed to get image configuration for image id %s, error: %s", imageID, err) } // If the image not exist locally, delete its reference -- 1.8.3.1