From e82862c69f582beb2468dc6feaa7cfe280eb4c98 Mon Sep 17 00:00:00 2001 From: Julien Duponchelle Date: Wed, 15 Jun 2016 10:32:38 +0200 Subject: [PATCH] Detect when command in the container exit Fix #571 --- gns3server/modules/docker/docker_vm.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/gns3server/modules/docker/docker_vm.py b/gns3server/modules/docker/docker_vm.py index 1f3d7cb1..39481dbc 100644 --- a/gns3server/modules/docker/docker_vm.py +++ b/gns3server/modules/docker/docker_vm.py @@ -486,7 +486,9 @@ class DockerVM(BaseVM): out.feed_eof() ws.close() break + yield from self.stop() + @asyncio.coroutine def is_running(self): """Checks if the container is running. @@ -530,20 +532,21 @@ class DockerVM(BaseVM): if state == "paused": yield from self.unpause() - yield from self._fix_permissions() - - # t=5 number of seconds to wait before killing the container - try: - yield from self.manager.query("POST", "containers/{}/stop".format(self._cid), params={"t": 5}) - log.info("Docker container '{name}' [{image}] stopped".format( - name=self._name, image=self._image)) - except DockerHttp304Error: - # Container is already stopped - pass + if state != "stopped": + yield from self._fix_permissions() + # t=5 number of seconds to wait before killing the container + try: + yield from self.manager.query("POST", "containers/{}/stop".format(self._cid), params={"t": 5}) + log.info("Docker container '{name}' [{image}] stopped".format( + name=self._name, image=self._image)) + except DockerHttp304Error: + # Container is already stopped + pass # Ignore runtime error because when closing the server except RuntimeError as e: log.debug("Docker runtime error when closing: {}".format(str(e))) return + self.status = "stopped" @asyncio.coroutine def pause(self):