mirror of
https://github.com/moby/moby.git
synced 2026-01-11 18:51:37 +00:00
`GET /image/{name}/json` now supports `platform` parameter allowing to
specify which platform variant of a multi-platform image to inspect.
For servers that do not use containerd image store integration, this
option will cause an error if the requested platform doesn't match the
image's actual platform
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
34 lines
965 B
Go
34 lines
965 B
Go
package specialimage
|
|
|
|
import (
|
|
"github.com/containerd/platforms"
|
|
"github.com/distribution/reference"
|
|
"github.com/opencontainers/image-spec/specs-go"
|
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
|
)
|
|
|
|
func MultiPlatform(dir string, imageRef string, imagePlatforms []ocispec.Platform) (*ocispec.Index, []ocispec.Descriptor, error) {
|
|
ref, err := reference.ParseNormalizedNamed(imageRef)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
var descs []ocispec.Descriptor
|
|
|
|
for _, platform := range imagePlatforms {
|
|
ps := platforms.Format(platform)
|
|
manifestDesc, _, err := oneLayerPlatformManifest(dir, platform, FileInLayer{Path: "bash", Content: []byte("layer-" + ps)})
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
descs = append(descs, manifestDesc)
|
|
}
|
|
|
|
idx, err := multiPlatformImage(dir, ref, ocispec.Index{
|
|
Versioned: specs.Versioned{SchemaVersion: 2},
|
|
MediaType: ocispec.MediaTypeImageIndex,
|
|
Manifests: descs,
|
|
})
|
|
return idx, descs, err
|
|
}
|