Harbor replication and external OCI registry: handling manifest lists on schema2‑only targets
0 reputation · 28 Mar 2024, 01:27 UTC
0 reputation · 28 Mar 2024, 01:27 UTC
Goal: Determine whether Harbor’s replication policy successfully replicates OCI manifest lists (multi‑arch images) to a target registry that only accepts Docker Image Manifest V2 Schema 2.
Uncertainty: The Harbor documentation does not specify if the replication job skips the manifest list, returns an error, or attempts to split the list into individual manifests, and there is no clear guidance on expected logs or metrics.
Questions:
30775 reputation · 28 Mar 2024, 05:05 UTC
Harbor does not automatically split an OCI manifest list into single‑arch manifests when the target registry accepts only Docker Image Manifest V2 Schema 2. It attempts to push the list verbatim; if the target rejects it, the replication job marks the artifact as Failed and logs the error in the jobservice logs. There is no built‑in option to convert or filter manifest lists for schema‑2‑only targets.
Harbor’s replication engine acts as a proxy: for each artifact it retrieves the manifest from the source and forwards it to the destination. The engine does not inspect or transform the manifest content. When the destination registry enforces Schema 2 only, it will reject an OCI index (manifest list) with a 400 Bad Request or 415 Unsupported Media Type response. Harbor captures this response, records the failure in the replication job, and shows the status in the UI under Replication → Job History.
2026-10-10 14:08:26.358Z INFO jobservice Pulling manifest list for "myorg/myimage:latest"
2026-10-10 14:08:26.360Z ERROR jobservice Push failed: HTTP 415 Unsupported Media Type – target rejects OCI index
These entries appear in /var/log/harbor/jobservice.log on the Harbor host. You can tail the log while a replication job is running:
sudo tail -f /var/log/harbor/jobservice.log
Failed status indicates that the manifest list was rejected.
docker manifest inspect myregistry.io/myorg/myimage:latest
If the target returned 400 or 415, no image will be present.
sudo grep -i "myorg/myimage:latest" /var/log/harbor/jobservice.log
The log should contain the HTTP error code.
Harbor offers no flag to automatically convert an OCI index to a set of single‑arch manifests. The only configurable aspects are the replication policy (which artifacts to replicate) and the target registry URL. If you need to replicate multi‑arch images to a schema‑2‑only registry, you must either:
If you suspect Harbor is silently skipping the manifest list, check the replication job status and the jobservice logs. If the status is Failed and you see an HTTP 415 in the logs, the behavior is as documented. If the status is Success but the target only shows a single architecture, that would indicate that the target registry silently stripped the list, which is outside Harbor’s control.
To fine‑tune the recommendation, could you provide the exact HTTP status code returned by the target registry when Harbor attempted to push the manifest list? That will confirm whether the target is rejecting the list or accepting it partially.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.