DEVX-155: fix: trust /var/run/docker.sock with free=0 when no inner dockerd exists
Post-merge / detect-and-configure (push) Successful in 1m38s
Post-merge / release-and-maintain (push) Failing after 2m20s

The host's rootless Docker socket is mounted as /var/run/docker.sock
inside CI containers. Its data root is on the host filesystem (not
accessible from inside the container), so _get_docker_free_bytes
returns 0. Previously the code didn't trust this and started a local
dockerd on /dev/shm (too small). Now checks pgrep for dockerd processes
— if none found inside the container, the socket is the host's Docker
and should be trusted.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
emil
2026-08-15 02:29:55 +02:00
co-authored by Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
parent cdbee0a317
commit 1dc27d6e4b
2 changed files with 40 additions and 1 deletions
+24 -1
View File
@@ -205,8 +205,10 @@ class TestStartDockerDaemon:
mock_ntf.return_value = MagicMock(name="/tmp/dockerd.log")
# is_docker_ready: first check (inner dockerd) True, then local daemon checks
mock_ready.side_effect = [True, False, False, False, False, True]
# subprocess.run calls: pgrep(before), pkill x3, pgrep(after), docker info, rm
# subprocess.run: pgrep(socket check, finds dockerd), pgrep(before kill),
# pkill x3, pgrep(after kill), docker info(dead), rm
mock_run.side_effect = [
MagicMock(returncode=0, stdout="123 /usr/bin/dockerd\n"), # socket check pgrep
_pgrep_empty(),
MagicMock(),
MagicMock(),
@@ -218,6 +220,27 @@ class TestStartDockerDaemon:
assert start_docker_daemon(timeout=5) is True
mock_popen.assert_called_once()
@patch("devx.molecule.start_docker._diagnose_socket")
@patch("devx.molecule.start_docker._get_docker_free_bytes", return_value=0)
@patch("devx.molecule.start_docker.is_docker_ready", return_value=True)
@patch("devx.molecule.start_docker.os.path.exists", side_effect=_exists_map({DOCKER_SOCK}))
@patch("devx.molecule.start_docker.glob.glob", return_value=[])
@patch("devx.molecule.start_docker.subprocess.run")
def test_no_inner_dockerd_trusts_host_socket(
self,
mock_run: MagicMock,
mock_glob: MagicMock,
mock_exists: MagicMock,
mock_ready: MagicMock,
mock_free: MagicMock,
mock_diag: MagicMock,
) -> None:
"""Should trust /var/run/docker.sock with free=0 when no inner dockerd exists."""
# pgrep finds no dockerd processes (returncode=1)
mock_run.return_value = MagicMock(returncode=1, stdout="")
assert start_docker_daemon(timeout=5) is True
assert os.environ.get("DOCKER_HOST") == f"unix://{DOCKER_SOCK}"
@patch("devx.molecule.start_docker._diagnose_socket")
@patch("devx.molecule.start_docker._get_docker_free_bytes")
@patch("devx.molecule.start_docker.is_docker_ready")