Deprecation of image formats in older published images
Hello, first off - thanks for continually supporting the Docker community!
Let me share about https://github.com/Perl/docker-perl/issues/161 - it seems that official image versions from 9 years ago and older are now unavailable for new registry pulls. We noticed it for Perl 5.14, but it also affects other languages too:
$ docker pull perl:5.14
5.14: Pulling from library/perl
[DEPRECATION NOTICE] Docker Image Format v1 and Docker Image manifest version 2, schema 1 support is disabled by default and will be removed in an upcoming release. Suggest the author of docker.io/library/perl:5.14 to upgrade the image to the OCI Format or Docker Image manifest v2, schema 2. More information at https://docs.docker.com/go/deprecated-image-specs/
$ docker pull python:2.7.9-wheezy
2.7.9-wheezy: Pulling from library/python
[DEPRECATION NOTICE] Docker Image Format v1 and Docker Image manifest version 2, schema 1 support is disabled by default and will be removed in an upcoming release. Suggest the author of docker.io/library/python:2.7.9-wheezy to upgrade the image to the OCI Format or Docker Image manifest v2, schema 2. More information at https://docs.docker.com/go/deprecated-image-specs/
$ docker pull node:0.12.2
0.12.2: Pulling from library/node
[DEPRECATION NOTICE] Docker Image Format v1 and Docker Image manifest version 2, schema 1 support is disabled by default and will be removed in an upcoming release. Suggest the author of docker.io/library/node:0.12.2 to upgrade the image to the OCI Format or Docker Image manifest v2, schema 2. More information at https://docs.docker.com/go/deprecated-image-specs/
What's the general stance of official-images regarding this? Considering that these are all already unsupported by their respective communities, would it still make sense for Docker Hub to publish them? Or can there be something that helps transitioning the older image formats used in these older images to use the newest/supported manifest format (ideally without necessitating a full rebuild?)
Thank you for filing the issue. :bow: :heart:
We had a recent discussion about this in https://github.com/docker-library/php/issues/1522, and I'll copy my very relevant response here:
Unfortunately, this is a little complicated. I think https://github.com/docker/roadmap/issues/173 is the roadmap issue for Docker at large, but some of the complexities for DOI are that we don't want to just "pull, convert, push" all these old images and have them show up as "updated", so ideally a solution here needs to happen without updating timestamps and that isn't something we can accomplish on our own. :bow:
Thank you for raising this though (and the user interest in it). :heart:
Thanks @tianon 👍 I agree with all points - I'd add that this is probably the sort of thing Docker Inc. could have made some prior official announcements, especially since a hint of this issue was already seen since 2021 and perhaps even earlier here in https://github.com/Perl/docker-perl/issues/70.
FYI I got the same request: https://jira.mariadb.org/browse/MDEV-35114
Ideally, we'd love to be able to convert these in-place on Docker Hub, but there's a lot of complexity in doing so that currently prevents the possibility.
If you have a tool which does not support schema1 and you still need to work with these older images, I have written https://github.com/tianon/oci-schema1 to help perform the conversion without any runtime support (bash + jq + a little crane).
Ideally, we'd love to be able to convert these in-place on Docker Hub, but there's a lot of complexity in doing so that currently prevents the possibility.
Is it a feasibility or practicality issue? Is that work that I can sponsor, for example? I work with legacy and I really need these old images.
The conversion itself is trivial (as seen in https://github.com/tianon/oci-schema1, where I've implemented it entirely in pure bash+jq); the primary complication is being able to mass-discover and mass-pull content (heavy both for the puller and for Docker Hub), perform the conversion, and then mass-push (again, heavy for Docker Hub), and to somehow do so without adjusting the "updated at" timestamp for all those old pushes (this is the "currently impossible without explicit support from Docker Hub" bit).
For now, Docker Hub continues to support fetching these old objects, and I intend to continue to advocate for that ability such that my scripts stay a reasonable and working solution. However, I am but one single person, so I would highly recommend making (pre-converted!) copies of any images upon which you rely.
Note for whoever stumbles upon this thread: although images for legacy PHP revisions display the error (e.g. php:5.3.29-apache), minor versions do seem to work just fine (e.g. php:5.3-apache).