diff --git a/podman/domain/containers.py b/podman/domain/containers.py index 66ceb65f..7d6305fd 100644 --- a/podman/domain/containers.py +++ b/podman/domain/containers.py @@ -472,6 +472,10 @@ def stop(self, **kwargs) -> None: if response.status_code == requests.codes.not_modified: if kwargs.get("ignore", False): return + else: + raise APIError( + response.text, response=response, explanation="Container already stopped." + ) body = response.json() raise APIError(body["cause"], response=response, explanation=body["message"]) diff --git a/podman/tests/integration/test_containers.py b/podman/tests/integration/test_containers.py index cd32f1ef..a9c877c6 100644 --- a/podman/tests/integration/test_containers.py +++ b/podman/tests/integration/test_containers.py @@ -15,7 +15,7 @@ from podman import PodmanClient from podman.domain.containers import Container from podman.domain.images import Image -from podman.errors import NotFound +from podman.errors import NotFound, APIError # @unittest.skipIf(os.geteuid() != 0, 'Skipping, not running as root') @@ -139,6 +139,12 @@ def test_container_crud(self): self.assertIn("/usr/bin/top", report["Processes"][0][-1]) top_ctnr.stop() + + # Try stopping the already stopped. + # See https://github.com/containers/podman-py/pull/550 for more info. + with self.assertRaises(APIError): + top_ctnr.stop() + top_ctnr.reload() self.assertIn(top_ctnr.status, ("exited", "stopped"))