diff --git a/changelogs/fragments/46322-docker_container-image-not-given.yaml b/changelogs/fragments/46322-docker_container-image-not-given.yaml
new file mode 100644
index 00000000000..844a76f1ac6
--- /dev/null
+++ b/changelogs/fragments/46322-docker_container-image-not-given.yaml
@@ -0,0 +1,2 @@
+bugfixes:
+- "docker_container - the behavior is improved in case ``image`` is not specified, but needed for (re-)creating the container."
diff --git a/lib/ansible/modules/cloud/docker/docker_container.py b/lib/ansible/modules/cloud/docker/docker_container.py
index a72e35876e6..eaaaddac969 100644
--- a/lib/ansible/modules/cloud/docker/docker_container.py
+++ b/lib/ansible/modules/cloud/docker/docker_container.py
@@ -1912,34 +1912,43 @@ class ContainerManager(DockerBaseClass):
         container = self._get_container(self.parameters.name)
 
         # If the image parameter was passed then we need to deal with the image
-        # version comparison, otherwise we should not care
-        if self.parameters.image:
-            image = self._get_image()
-            self.log(image, pretty_print=True)
-            if not container.exists:
-                # New container
-                self.log('No container found')
-                new_container = self.container_create(self.parameters.image, self.parameters.create_parameters)
+        # version comparison. Otherwise we handle this depending on whether
+        # the container already runs or not; in the former case, in case the
+        # container needs to be restarted, we use the existing container's
+        # image ID.
+        image = self._get_image()
+        self.log(image, pretty_print=True)
+        if not container.exists:
+            # New container
+            self.log('No container found')
+            if not self.parameters.image:
+                self.fail('Cannot create container when image is not specified!')
+            new_container = self.container_create(self.parameters.image, self.parameters.create_parameters)
+            if new_container:
+                container = new_container
+        else:
+            # Existing container
+            different, differences = container.has_different_configuration(image)
+            image_different = False
+            if self.parameters.comparisons['image']['comparison'] == 'strict':
+                image_different = self._image_is_different(image, container)
+            if image_different or different or self.parameters.recreate:
+                self.diff['differences'] = differences
+                if image_different:
+                    self.diff['image_different'] = True
+                self.log("differences")
+                self.log(differences, pretty_print=True)
+                image_to_use = self.parameters.image
+                if not image_to_use and container and container.Image:
+                    image_to_use = container.Image
+                if not image_to_use:
+                    self.fail('Cannot recreate container when image is not specified or cannot be extracted from current container!')
+                if container.running:
+                    self.container_stop(container.Id)
+                self.container_remove(container.Id)
+                new_container = self.container_create(image_to_use, self.parameters.create_parameters)
                 if new_container:
                     container = new_container
-            else:
-                # Existing container
-                different, differences = container.has_different_configuration(image)
-                image_different = False
-                if self.parameters.comparisons['image']['comparison'] == 'strict':
-                    image_different = self._image_is_different(image, container)
-                if image_different or different or self.parameters.recreate:
-                    self.diff['differences'] = differences
-                    if image_different:
-                        self.diff['image_different'] = True
-                    self.log("differences")
-                    self.log(differences, pretty_print=True)
-                    if container.running:
-                        self.container_stop(container.Id)
-                    self.container_remove(container.Id)
-                    new_container = self.container_create(self.parameters.image, self.parameters.create_parameters)
-                    if new_container:
-                        container = new_container
 
         if container and container.exists:
             container = self.update_limits(container)