paclair icon indicating copy to clipboard operation
paclair copied to clipboard

Add ability to work with multi-platform docker images

Open SofyaTavrovskaya opened this issue 4 years ago • 0 comments

Paclair doesn't support multi-platform images like gcr.io/kubernetes-e2e-test-images/sample-apiserver:1.17 and fails with following error:

  File "/home/sofya/paclair/virt/bin/paclair", line 11, in <module>
    load_entry_point('paclair', 'console_scripts', 'paclair')()
  File "/home/sofya/paclair/paclair/__main__.py", line 71, in main
    paclair_object.push(args.plugin, host)
  File "/home/sofya/paclair/paclair/handler.py", line 76, in push
    self._plugins[plugin].push(name)
  File "/home/sofya/paclair/paclair/plugins/abstract_plugin.py", line 53, in push
    return self.clair.post_ancestry(self.create_ancestry(name))
  File "/home/sofya/paclair/paclair/plugins/docker_plugin.py", line 73, in create_ancestry
    return DockerAncestry(self.create_docker_image(name))
  File "/home/sofya/paclair/paclair/ancestries/docker.py", line 24, in __init__
    for layer in docker_image.get_layers():
  File "/home/sofya/paclair/paclair/docker/docker_image.py", line 86, in get_layers
    fs_layers = manifest['layers']
KeyError: 'layers' 

It happens because in case of multi-platform images Docker API returns manifest with mediaType: 'application/vnd.docker.distribution.manifest.list.v2+json' .

To have ability to work with multi-platform images I suggest getting manifest with mediaType: 'application/vnd.docker.distribution.manifest.v2+json' by specifying this mediaType in request Headers.

SofyaTavrovskaya avatar Mar 18 '21 09:03 SofyaTavrovskaya