From fc7d1ce752d80eba65b4580f989c273f3246c195 Mon Sep 17 00:00:00 2001 From: Yuanhong Peng Date: Wed, 15 Mar 2017 22:14:14 +0800 Subject: [PATCH] Ignore `layer does not exist` error from `docker images` Fix #31350 As we can see in `daemon.Images()`, there is a gap between `allImages = daemon.imageStore.Map()` and `l, err := daemon.layerStore.Get(layerID)`, so images which still exist when we hit `allImages = daemon.imageStore.Map()` may have already been deleted when we hit `l, err := daemon.layerStore.Get(layerID)`. ``` if danglingOnly { allImages = daemon.imageStore.Heads() } else { allImages = daemon.imageStore.Map() } ... for id, img := range allImages { ... layerID := img.RootFS.ChainID() var size int64 if layerID != "" { l, err := daemon.layerStore.Get(layerID) if err != nil { return nil, err } ``` Signed-off-by: Yuanhong Peng Upstream-commit: 2b9694c29e3bbbce23f0c4009f908a23c115c598 Component: engine --- components/engine/daemon/images.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/components/engine/daemon/images.go b/components/engine/daemon/images.go index 5c89ce51c8..b014fd4887 100644 --- a/components/engine/daemon/images.go +++ b/components/engine/daemon/images.go @@ -118,6 +118,11 @@ func (daemon *Daemon) Images(imageFilters filters.Args, all bool, withExtraAttrs if layerID != "" { l, err := daemon.layerStore.Get(layerID) if err != nil { + // The layer may have been deleted between the call to `Map()` or + // `Heads()` and the call to `Get()`, so we just ignore this error + if err == layer.ErrLayerDoesNotExist { + continue + } return nil, err }