Docker Community Forums

Share and learn in the Docker community.

Layer ID in "history" section of V2 registry manifest changes when new image is built using docker v1.10 and newer


(Anathor21) #1

OS: SLES 12
Docker Version 1.10(SLES), 1.11(SLES), 1.12.3(SLES OBS build)
Registry version 2.3.1, Artifactory Pro V2 registry
Issue Type: Registry manifest in V2 registry not maintaining ‘top’ layer ID for images build from prior image.

Steps to reproduce:

  1. Create base image and push to registry (I will call this image the “base” image going forward)
  2. Create Dockerfile based on that image with at least one command (simple RUN echo “hello” > /etc/hello will work)
  3. Build image from Dockerfile and push to registry (I will call this image the “runtime” image going forward)

Using the docker registry url for manifest pull the manifest for each of these images
http://<registry host/ip>:/v2//manifests/

  1. Inspect the “history” section of the returned json file for “Base” image:
    A- Note the “id” for the first (topmost) “v1Compatibility” entry - This is the v1 ImageID for this “base” image.
    B- Note the “parent” value associated with this ‘base’ image ID (this is one layer earlier than the ImageID)

  2. Inspect the “history” section of the returned json file for the “runtime” image:
    A- Search the “v1Compatibility” entries for the “v1 ImageID” of the “base” image
    – NOTE: IF you are running Docker version 1.8 when you built the image (Step #3 above), you will find this ID, IF you are using Docker version >= 1.10 when you built the image in step #3 above, you will NOT find this ID (and this is the failure I’m reporting)
    B- Search the “v1Compatibility” entries for the “base” image’s “parent” value
    – NOTE, you WILL find this value regardless of version of Docker used
    – The value found listed as the “Parent” of some layer and the “id” of a lower (older) layer

So, if you followed my steps to reproduce first using Docker 1.8 on the build machine you will see the “base” imageID in the runtime image, but if you use Docker 1.10 or newer, you will see that this layerID has changed.

Can anyone help with this? Is this a bug in newer versions of docker or some intentional change? IF it is not a bug, how can I relate a base image to a runtime image through the lineage?

Thank you in advance for any assistance you may be able to render.