mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #41873 from cpuguy83/fix_builder_inconsisent_platform
Fix builder inconsistent error on buggy platform
This commit is contained in:
commit
44aacff3fc
1 changed files with 28 additions and 1 deletions
|
@ -5,18 +5,23 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
|
||||||
|
"github.com/containerd/containerd/platforms"
|
||||||
"github.com/docker/distribution/reference"
|
"github.com/docker/distribution/reference"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/api/types/backend"
|
"github.com/docker/docker/api/types/backend"
|
||||||
"github.com/docker/docker/builder"
|
"github.com/docker/docker/builder"
|
||||||
|
"github.com/docker/docker/errdefs"
|
||||||
"github.com/docker/docker/image"
|
"github.com/docker/docker/image"
|
||||||
"github.com/docker/docker/layer"
|
"github.com/docker/docker/layer"
|
||||||
"github.com/docker/docker/pkg/containerfs"
|
"github.com/docker/docker/pkg/containerfs"
|
||||||
|
"github.com/docker/docker/pkg/progress"
|
||||||
|
"github.com/docker/docker/pkg/streamformatter"
|
||||||
"github.com/docker/docker/pkg/stringid"
|
"github.com/docker/docker/pkg/stringid"
|
||||||
"github.com/docker/docker/pkg/system"
|
"github.com/docker/docker/pkg/system"
|
||||||
"github.com/docker/docker/registry"
|
"github.com/docker/docker/registry"
|
||||||
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
type roLayer struct {
|
type roLayer struct {
|
||||||
|
@ -161,7 +166,29 @@ func (i *ImageService) pullForBuilder(ctx context.Context, name string, authConf
|
||||||
if err := i.pullImageWithReference(ctx, ref, platform, nil, pullRegistryAuth, output); err != nil {
|
if err := i.pullImageWithReference(ctx, ref, platform, nil, pullRegistryAuth, output); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return i.GetImage(name, platform)
|
|
||||||
|
img, err := i.GetImage(name, platform)
|
||||||
|
if errdefs.IsNotFound(err) && img != nil && platform != nil {
|
||||||
|
imgPlat := specs.Platform{
|
||||||
|
OS: img.OS,
|
||||||
|
Architecture: img.BaseImgArch(),
|
||||||
|
Variant: img.BaseImgVariant(),
|
||||||
|
}
|
||||||
|
|
||||||
|
p := *platform
|
||||||
|
if !platforms.Only(p).Match(imgPlat) {
|
||||||
|
po := streamformatter.NewJSONProgressOutput(output, false)
|
||||||
|
progress.Messagef(po, "", `
|
||||||
|
WARNING: Pulled image with specified platform (%s), but the resulting image's configured platform (%s) does not match.
|
||||||
|
This is most likely caused by a bug in the build system that created the fetched image (%s).
|
||||||
|
Please notify the image author to correct the configuration.`,
|
||||||
|
platforms.Format(p), platforms.Format(imgPlat), name,
|
||||||
|
)
|
||||||
|
logrus.WithError(err).WithField("image", name).Warn("Ignoring error about platform mismatch where the manifest list points to an image whose configuration does not match the platform in the manifest.")
|
||||||
|
err = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return img, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetImageAndReleasableLayer returns an image and releaseable layer for a reference or ID.
|
// GetImageAndReleasableLayer returns an image and releaseable layer for a reference or ID.
|
||||||
|
|
Loading…
Reference in a new issue