Files
openide/platform/sqlite/docker-image-extract.py
Vladimir Krivosheev 2b6c42bbb1 vcs log sqlite backend - rename native lib to avoid conflicts
GitOrigin-RevId: 242c92aef577c49598355a87d5597ee85642d2ea
2023-01-17 19:01:00 +00:00

32 lines
920 B
Python

# https://www.madebymikal.com/quick-hack-extracting-the-contents-of-a-docker-image-to-disk/
# Call me like this:
# docker-image-extract tarfile.tar extracted
import tarfile
import json
import os
import sys
image_path = sys.argv[1]
extracted_path = sys.argv[2]
image = tarfile.open(image_path)
manifest = json.loads(image.extractfile('manifest.json').read())
for layer in manifest[0]['Layers']:
print('Found layer: %s' % layer)
layer_tar = tarfile.open(fileobj=image.extractfile(layer))
for tarinfo in layer_tar:
print(' ... %s' % tarinfo.name)
if tarinfo.isdev():
print(' --> skip device files')
continue
dest = os.path.join(extracted_path, tarinfo.name)
if not tarinfo.isdir() and os.path.exists(dest):
print(' --> remove old version of file')
os.unlink(dest)
layer_tar.extract(tarinfo, path=extracted_path)