builder: fix copy —from conflict with force pull

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Upstream-commit: c268d9da4b658b2dd1fe48010a8929b603913e92
Component: engine
This commit is contained in:
Tonis Tiigi
2017-06-20 15:45:33 -07:00
parent 8c7c972d20
commit d3db128900
6 changed files with 87 additions and 20 deletions
+10 -2
View File
@@ -18,6 +18,7 @@ import (
)
type releaseableLayer struct {
released bool
layerStore layer.Store
roLayer layer.Layer
rwLayer layer.RWLayer
@@ -70,6 +71,10 @@ func (rl *releaseableLayer) DiffID() layer.DiffID {
}
func (rl *releaseableLayer) Release() error {
if rl.released {
return nil
}
rl.released = true
rl.releaseRWLayer()
return rl.releaseROLayer()
}
@@ -143,8 +148,11 @@ func (daemon *Daemon) GetImageAndReleasableLayer(ctx context.Context, refOrID st
return nil, layer, err
}
if !opts.ForcePull {
image, _ := daemon.GetImage(refOrID)
if opts.PullOption != backend.PullOptionForcePull {
image, err := daemon.GetImage(refOrID)
if err != nil && opts.PullOption == backend.PullOptionNoPull {
return nil, nil, err
}
// TODO: shouldn't we error out if error is different from "not found" ?
if image != nil {
layer, err := newReleasableLayerForImage(image, daemon.layerStore)