From 540c8e9b201cfcf46cf9d2c05d42c492edda4117 Mon Sep 17 00:00:00 2001 From: John Howard Date: Tue, 6 Sep 2016 09:09:18 -0700 Subject: [PATCH] Windows: Skip layers+base images Signed-off-by: John Howard --- image/rootfs.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/image/rootfs.go b/image/rootfs.go index 4cbb87381d..7b24e3ed1e 100644 --- a/image/rootfs.go +++ b/image/rootfs.go @@ -1,10 +1,21 @@ package image -import "github.com/docker/docker/layer" +import ( + "runtime" + + "github.com/Sirupsen/logrus" + "github.com/docker/docker/layer" +) // TypeLayers is used for RootFS.Type for filesystems organized into layers. const TypeLayers = "layers" +// typeLayersWithBase is an older format used by Windows up to v1.12. We +// explicitly handle this as an error case to ensure that a daemon which still +// has an older image like this on disk can still start, even though the +// image itself is not usable. See https://github.com/docker/docker/pull/25806. +const typeLayersWithBase = "layers+base" + // RootFS describes images root filesystem // This is currently a placeholder that only supports layers. In the future // this can be made into an interface that supports different implementations. @@ -25,5 +36,9 @@ func (r *RootFS) Append(id layer.DiffID) { // ChainID returns the ChainID for the top layer in RootFS. func (r *RootFS) ChainID() layer.ChainID { + if runtime.GOOS == "windows" && r.Type == typeLayersWithBase { + logrus.Warnf("Layer type is unsupported on this platform. DiffIDs: '%v'", r.DiffIDs) + return "" + } return layer.CreateChainID(r.DiffIDs) }