diff --git a/builder/dockerfile/internals.go b/builder/dockerfile/internals.go index b5d9b60199..0464766cd7 100644 --- a/builder/dockerfile/internals.go +++ b/builder/dockerfile/internals.go @@ -557,8 +557,9 @@ func (b *Builder) run(c *daemon.Container) error { go func() { select { case <-b.cancelled: - logrus.Debugln("Build cancelled, killing container:", c.ID) + logrus.Debugln("Build cancelled, killing and removing container:", c.ID) c.Kill() + b.removeContainer(c.ID) case <-finished: } }() @@ -582,14 +583,21 @@ func (b *Builder) run(c *daemon.Container) error { return nil } +func (b *Builder) removeContainer(c string) error { + rmConfig := &daemon.ContainerRmConfig{ + ForceRemove: true, + RemoveVolume: true, + } + if err := b.docker.Remove(c, rmConfig); err != nil { + fmt.Fprintf(b.Stdout, "Error removing intermediate container %s: %v\n", stringid.TruncateID(c), err) + return err + } + return nil +} + func (b *Builder) clearTmp() { for c := range b.tmpContainers { - rmConfig := &daemon.ContainerRmConfig{ - ForceRemove: true, - RemoveVolume: true, - } - if err := b.docker.Remove(c, rmConfig); err != nil { - fmt.Fprintf(b.Stdout, "Error removing intermediate container %s: %v\n", stringid.TruncateID(c), err) + if err := b.removeContainer(c); err != nil { return } delete(b.tmpContainers, c)