-
Notifications
You must be signed in to change notification settings - Fork 94
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Error pushing manifest list/index #191
Comments
Can you run the push with Would be also good to understand which registry you are pushing to (self-hosted? based on distribution/distribution? version?) |
Hi @aamato80 have you been able to try the command with |
Hi @estesp I am taking over here since I think I am seeing the same issue as the OP and there was no progress regarding error/debug messages.
It's worth noting that
A subsequent and passing call to your tool (without building/pushing images) produces this debug log:
|
Interesting data point: I did an inspect prior to pushing multi-arch index with your tool: `$ ./manifest-tool --insecure inspect ${TARGET_DOCKER_REGISTRY}/${TARGET_DOCKER_GROUP}/arm64v8/${IMAGE_NAME}:${CI_COMMIT_TAG} $ ./manifest-tool --insecure inspect ${TARGET_DOCKER_REGISTRY}/${TARGET_DOCKER_GROUP}/amd64/${IMAGE_NAME}:${CI_COMMIT_TAG} But still pushing says, something is missing:
|
@b-morgenthaler interesting; so the specific piece of content in the first error you included is specifically: {
"errors":
[
{ "code": "BLOB_UNKNOWN",
"message": "blob unknown to registry",
"detail": "sha256:f5ef2458f9f1d711e98db59f2239e1171bc9ecf2c442a068e11fc62e105d2b0c"
}
]
} The flow of creating the manifest list/index is to first make sure that all referred content is in the target imageref repo using either cross-repo blob mount (for blobs) or pushing the actual ref into the target repo (without a tag). After those steps are complete, the manifest list/index referring to all that content is pushed. It seems there is a possible timing issue that the content is not fully committed in your chosen registry implementation such that the registry throws a "missing content" error when it is pushed immediately after all the dependent content within the "tree" of member images. I can only assume it works when you run it again because the content seems to now be stably in the registry's data store/index; however Nexus has implemented that. Your second example shows that the missing content is the first manifest object (the linux/arm64 manifest digest), which would possibly be the last thing pushed in the ordering of steps that I would prefer not to generate any artificial delays in |
My first thought was also a timing issue but ruled it out at the end after verifying the following which had no positive impact regarding the error:
On a side note: I activated Interesting as well: The time between pushing the images and pushing the multi-arch manifest seems not to be important at all. No matter how fast or slow these two things happen after each other, a subsequent call to the
It is always the same type of error I am seeing. Regarding the order of the pushed image and the error: the images are built/pushed in parallel on dedicated Gitlab runners, so I would have to go thru the logs to see which one finished first or later. |
I think I didn't do a great job separating the concepts of pushed content (as standalone images) and pushed content that gets created during the manifest list creation steps. You are correct that there is no issue with the created standalone image content and any timing issues there. The To be clearer, when you assemble a target manifest list from multiple source images, the target (final) repository must contain references to any source content that is outside that specific repository reference. Those references are pushed during the operations that In your case the target repo is something like myrepo/image_name:some_version, and the source images are coming from myrepo/arm64v8/image_name:some_version and myrepo/amd64/image_name:some_version. If we want to test this theory about the commit state of the pushes of content references into the target, one option is to temporarily try using the same repo for source and target by using tags instead of distinct image repo names. That way these extra content references won't need to be pushed into the target repo, and if the commit state of these extra reference pushes is the problem with Nexus, then you won't see it anymore when using the tag method on the same repo—because they won't be performed at all. For example, you can try creating source images named myrepo/image_name:some_version_arm64v8 and myrepo/image_name:some_version_amd64* and keep the target as myrepo/image_name:some_version. This keeps sources and target all in the same repo (myrepo/image_name) and won't be doing any additional content reference pushes before doing the |
This seems to work. EDIT: after a few more build/push and deployments with manifest-tool (even removing the artificial delay completely), I am fairly sure that having everything within the same repo is properly working for a stable build pipeline. How to move on from this point? Is this a registry issue or a combination between manifest-tool and the registry we use (Nexus)? |
Hi all,
i am trying to use manifest-tool to create a multi architect docker image.
As explained in your guide, i created the different images, in my case for arm64 and amd64 with kaniko, and i tried to exexcute the manifest tool.
I tried both, yaml and spec mode, but without success.
I receive any way an error like this one:
Error pushing manifest list/index to registry: sha256:0c91a4e37f4765d431b50d62439ba660b8b57ae75412fd45c371d9174c38e3df: manifest list/index references to blobs and/or manifests are missing in your target registry...
This one is an example of the used yaml:
Any suggestion? There is something wrong in my configuration?
Many Thanks!
The text was updated successfully, but these errors were encountered: