apple / apple/container

Feature: `container manifest` subcommand for multi-arch OCI image index creation

Open
#1,495 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Swift
Stars
49.9k
Forks
1.8k
Avg merge
1d 20h
Merged PRs (30d)
22

Description

## Summary

`container build --platform ` builds single-architecture images correctly, but there is no way to assemble a multi-architecture OCI Image Index (manifest list) from the CLI. Docker provides `docker manifest create/add/push/inspect` and Podman provides `podman manifest` for this workflow. `container` has no equivalent.

## Current workflow (broken)

```bash
# Build per-arch — works fine
container build --platform linux/amd64 -t myrepo/myimage:amd64 .
container build --platform linux/arm64 -t myrepo/myimage:arm64 .
container build --platform linux/ppc64le -t myrepo/myimage:ppc64le .

# Assemble manifest list — no command exists
container manifest create myrepo/myimage:latest # ← Error: Plugin 'container-manifest' not found
```

## Related issue

\#1001 shows that even `container image push` has bugs with OCI Index child manifest registration — the recommended workaround there is already `skopeo copy`. A first-class `container manifest` command would address both the creation gap and provide a reliable push path.

## Proposed commands

Matching Docker/Podman conventions:

```bash
container manifest create myrepo/myimage:latest
container manifest add myrepo/myimage:latest myrepo/myimage:amd64
container manifest add myrepo/myimage:latest myrepo/myimage:arm64
container manifest add myrepo/myimage:latest myrepo/myimage:ppc64le
container manifest push myrepo/myimage:latest
container manifest inspect myrepo/myimage:latest
```

## Workaround (until implemented)

Save each per-arch image as an OCI archive and use `skopeo` to copy to a registry, then use `skopeo` or another tool to create the manifest list:

```bash
container image save myrepo/myimage:amd64 -o image-amd64.tar
skopeo copy oci-archive:image-amd64.tar docker://myrepo/myimage:amd64

container image save myrepo/myimage:arm64 -o image-arm64.tar
skopeo copy oci-archive:image-arm64.tar docker://myrepo/myimage:arm64

# Then use docker manifest or podman manifest to assemble
docker manifest create myrepo/myimage:latest \
myrepo/myimage:amd64 myrepo/myimage:arm64
docker manifest push myrepo/myimage:latest
```

This workaround works today but requires an external registry and additional tools.

## Environment

- macOS 26.0, Apple Silicon
- `container` CLI (current version)

> [!Note]
> Responses generated with Claude

Contributor guide

Open the contributing guide

Research direction

Start by examining the existing `container image push` command and the OCI Index child-manifest handling referenced in issue #1001. Map how CLI subcommands are registered and determine the scope for create, add, push, and inspect. Done means a first-class `container manifest` command can assemble and reliably push multi-architecture OCI image indexes.

Written by the indexing model from the issue text.

Assessment

Tech stack
swift
Domain
cli
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.