Public Access
DEVX-155: fix: trust /var/run/docker.sock with free=0 when no inner dockerd exists
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:
co-authored by
Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
parent
cdbee0a317
commit
1dc27d6e4b
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user