From 35368a62c565e948690cc89558cc3744388337d4 Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Mon, 8 May 2017 10:32:20 -0700 Subject: [PATCH] builder: Fix releasing implicit mounts Signed-off-by: Tonis Tiigi Upstream-commit: 29efb93a19fd46e026055892ccd5c5f44743277d Component: engine --- .../engine/builder/dockerfile/imagecontext.go | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/components/engine/builder/dockerfile/imagecontext.go b/components/engine/builder/dockerfile/imagecontext.go index 45fc8ab47f..b9393b7bc3 100644 --- a/components/engine/builder/dockerfile/imagecontext.go +++ b/components/engine/builder/dockerfile/imagecontext.go @@ -19,10 +19,11 @@ type pathCache interface { // imageContexts is a helper for stacking up built image rootfs and reusing // them as contexts type imageContexts struct { - b *Builder - list []*imageMount - byName map[string]*imageMount - cache pathCache + b *Builder + list []*imageMount // indexed list of stages + implicitMounts []*imageMount // implicitly mounted images + byName map[string]*imageMount + cache pathCache } func (ic *imageContexts) newImageMount(id string) *imageMount { @@ -75,14 +76,17 @@ func (ic *imageContexts) get(indexOrName string) (*imageMount, error) { if err != nil { return nil, errors.Wrapf(err, "invalid from flag value %s", indexOrName) } + ic.implicitMounts = append(ic.implicitMounts, im) return im, nil } func (ic *imageContexts) unmount() (retErr error) { - for _, im := range ic.list { - if err := im.unmount(); err != nil { - logrus.Error(err) - retErr = err + for _, iml := range append([][]*imageMount{}, ic.list, ic.implicitMounts) { + for _, im := range iml { + if err := im.unmount(); err != nil { + logrus.Error(err) + retErr = err + } } } for _, im := range ic.byName {