diff --git a/piuparts.py b/piuparts.py index f05db2ff0b7da0d99f1d8d36fa0114d203716428..e9c9934d3c5bce2ca9660697f73bb80905f83a27 100644 --- a/piuparts.py +++ b/piuparts.py @@ -46,7 +46,6 @@ import os import tarfile import stat import re -import json import pickle import subprocess import traceback @@ -922,15 +921,19 @@ class Chroot: def setup_from_docker(self, docker_image): self.check_if_docker_storage_driver_is_supported() - ret_code, output = run(['docker', 'run', '-d', '-it', docker_image, 'bash']) - if ret_code != 0: - logging.error("Couldn't start the container from '%s'" % docker_image) - panic() - self.docker_container = output.strip() - ret_code, output = run(['docker', 'inspect', self.docker_container]) - container_data = json.loads(output)[0] - self.name = container_data['GraphDriver']['Data']['MergedDir'] - logging.info("New container created '%s'" % self.docker_container) + with tempfile.TemporaryDirectory() as tmpdir: + tmp = os.path.join(tmpdir, "cid") + ret_code, output = run(['docker', 'run', '-d', '-it', '--cidfile', tmp, docker_image, 'bash']) + if ret_code != 0: + logging.error("Couldn't start the container from '%s'" % docker_image) + panic() + + with open(tmp, "r") as fd: + self.docker_container = fd.read().strip() + + ret_code, output = run(['docker', 'inspect', '-f', '{{ .GraphDriver.Data.MergedDir }}', self.docker_container]) + self.name = output.strip() + logging.info("New container created %r at %r", self.docker_container, self.name) def setup_from_lvm(self, lvm_volume): """Create a chroot by creating an LVM snapshot."""