diff --git a/changelogs/fragments/47712-docker_container-detach-auto-remove.yml b/changelogs/fragments/47712-docker_container-detach-auto-remove.yml new file mode 100644 index 00000000000..728218fb5cd --- /dev/null +++ b/changelogs/fragments/47712-docker_container-detach-auto-remove.yml @@ -0,0 +1,2 @@ +bugfixes: +- "docker_container - fixing race condition when ``detach`` and ``auto_remove`` are both ``true``." diff --git a/lib/ansible/module_utils/docker_common.py b/lib/ansible/module_utils/docker_common.py index aad9c69cccf..71819d9800a 100644 --- a/lib/ansible/module_utils/docker_common.py +++ b/lib/ansible/module_utils/docker_common.py @@ -35,7 +35,7 @@ HAS_DOCKER_ERROR = None try: from requests.exceptions import SSLError from docker import __version__ as docker_version - from docker.errors import APIError, TLSParameterError, NotFound + from docker.errors import APIError, NotFound, TLSParameterError from docker.tls import TLSConfig from docker.constants import DEFAULT_DOCKER_API_VERSION from docker import auth @@ -119,6 +119,9 @@ if not HAS_DOCKER_PY: class APIError(Exception): pass + class NotFound(Exception): # noqa: F811 + pass + def sanitize_result(data): """Sanitize data object for return to Ansible. @@ -442,6 +445,8 @@ class AnsibleDockerClient(Client): self.log("Inspecting container Id %s" % result['Id']) result = self.inspect_container(container=result['Id']) self.log("Completed container inspection") + except NotFound as exc: + return None except Exception as exc: self.fail("Error inspecting container: %s" % exc)