From 9e8a6bcd74fe7fa306af59bf5b69bfdd32bc2693 Mon Sep 17 00:00:00 2001 From: Miquel Duran-Frigola Date: Tue, 27 Jun 2023 13:28:24 +0200 Subject: [PATCH] update version [skip ci] --- ersilia/_static_version.py | 2 +- ersilia/hub/pull/pull.py | 2 +- ersilia/serve/autoservice.py | 3 +++ ersilia/serve/services.py | 8 ++++---- ersilia/utils/docker.py | 17 ++++++++++++++--- 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/ersilia/_static_version.py b/ersilia/_static_version.py index 9eaa0426..a543ebb1 100644 --- a/ersilia/_static_version.py +++ b/ersilia/_static_version.py @@ -1 +1 @@ -version = "0.1.16" +version = "0.1.17" diff --git a/ersilia/hub/pull/pull.py b/ersilia/hub/pull/pull.py index d791740d..ee52385a 100644 --- a/ersilia/hub/pull/pull.py +++ b/ersilia/hub/pull/pull.py @@ -97,7 +97,7 @@ def pull(self): DOCKERHUB_ORG, self.model_id, DOCKERHUB_LATEST_TAG ) ) - # except: + # except: #TODO add better error # raise DockerImageArchitectureNotAvailableError(model=self.model_id) else: self.logger.info("Image {0} is not available".format(self.image_name)) diff --git a/ersilia/serve/autoservice.py b/ersilia/serve/autoservice.py index 6d776856..0ba74a2f 100644 --- a/ersilia/serve/autoservice.py +++ b/ersilia/serve/autoservice.py @@ -290,8 +290,10 @@ def clean_docker_containers(self): self.logger.debug("Silencing docker containers if necessary") dm = DockerManager(config_json=self.config_json) if dm.is_inside_docker(): + self.logger.debug("It is inside docker") return if dm.is_installed(): + self.logger.debug("It is not inside docker") dm.stop_containers(self.model_id) def serve(self): @@ -311,6 +313,7 @@ def close(self): os.remove(tmp_file) self.clean_temp_dir() self.clean_docker_containers() + self.service.close() def api( self, api_name, input, output=DEFAULT_OUTPUT, batch_size=DEFAULT_BATCH_SIZE diff --git a/ersilia/serve/services.py b/ersilia/serve/services.py index 7c872549..b34c1a52 100644 --- a/ersilia/serve/services.py +++ b/ersilia/serve/services.py @@ -460,7 +460,7 @@ def __init__(self, model_id, config_json=None, preferred_port=None): self.image_name = "{0}/{1}:{2}".format( DOCKERHUB_ORG, self.model_id, DOCKERHUB_LATEST_TAG ) - self.logger.debug("Staring Docker Daemon service") + self.logger.debug("Starting Docker Daemon service") self.tmp_folder = tempfile.mkdtemp(prefix="ersilia-") self.logger.debug( "Creating temporary folder {0} and mounting as volume in container".format( @@ -507,7 +507,9 @@ def _stop_all_containers_of_image(self): "Stopping and removing container {0}".format(container.name) ) container.stop() + self.logger.debug("Container stopped") container.remove() + self.logger.debug("Container removed") def _get_apis(self): file_name = os.path.join( @@ -575,7 +577,5 @@ def api(self, api_name, input): return self._api_with_url(api_name=api_name, input=input) def close(self): - self.logger.debug( - "Stopping and removing container {0}".format(self.container_id) - ) + self.logger.debug("Stopping and removing container") self._stop_all_containers_of_image() diff --git a/ersilia/utils/docker.py b/ersilia/utils/docker.py index 62fd4bee..0c258aa0 100644 --- a/ersilia/utils/docker.py +++ b/ersilia/utils/docker.py @@ -149,14 +149,25 @@ def remove(name): run_command(cmd) @staticmethod - def cp_from_container(name, img_path, local_path): + def cp_from_container(name, img_path, local_path, org=None, img=None, tag=None): local_path = os.path.abspath(local_path) - cmd = "docker cp %s:%s %s" % (name, img_path, local_path) + tmp_file = os.path.join(tempfile.mkdtemp(prefix="ersilia-"), "tmp.txt") + cmd = "docker cp %s:%s %s &> %s" % (name, img_path, local_path, tmp_file) run_command(cmd) + with open(tmp_file, "r") as f: + output = f.read() + if "No such container" in output: + img_name = "{0}/{1}:{2}".format(org, img, tag) + cmd = "docker run --platform linux/amd64 -d --name={0} {1}".format( + name, img_name + ) + run_command(cmd) + cmd = "docker cp %s:%s %s" % (name, img_path, local_path) + run_command(cmd) def cp_from_image(self, img_path, local_path, org, img, tag): name = self.run(org, img, tag, name=None) - self.cp_from_container(name, img_path, local_path) + self.cp_from_container(name, img_path, local_path, org=org, img=img, tag=tag) self.remove(name) @staticmethod