diff --git a/samcli/lib/constants.py b/samcli/lib/constants.py index ec9dd1d3f57..3deabfed085 100644 --- a/samcli/lib/constants.py +++ b/samcli/lib/constants.py @@ -1 +1 @@ -DOCKER_MIN_API_VERSION = "1.35" +DOCKER_MIN_API_VERSION = "1.44" diff --git a/samcli/local/docker/container_client.py b/samcli/local/docker/container_client.py index 00e33ae4c38..5a1bebc468f 100644 --- a/samcli/local/docker/container_client.py +++ b/samcli/local/docker/container_client.py @@ -62,7 +62,7 @@ class ContainerClient(docker.DockerClient, ABC): # Initialize socket_path socket_path: Optional[str] = None - def __init__(self, base_url=None): + def __init__(self, client_version, base_url=None): """ Initialize the container client with environment variable processing and overrides. @@ -94,7 +94,7 @@ def __init__(self, base_url=None): client_params["base_url"] = base_url # Specify minimum version - client_params["version"] = DOCKER_MIN_API_VERSION + client_params["version"] = client_version # Initialize DockerClient with processed parameters LOG.debug(f"Creating container client with parameters: {client_params}") @@ -292,10 +292,10 @@ def __init__(self): if socket_path: LOG.debug(f"Creating Docker container client with base_url={socket_path}.") - super().__init__(base_url=socket_path) + super().__init__(base_url=socket_path, client_version=DOCKER_MIN_API_VERSION) else: LOG.debug("Creating Docker container client from environment variable.") - super().__init__() + super().__init__(client_version=DOCKER_MIN_API_VERSION) def get_runtime_type(self) -> str: """ @@ -504,7 +504,9 @@ def __init__(self): return None LOG.debug(f"Creating Finch container client with base_url={socket_path}") - super().__init__(base_url=socket_path) + super().__init__( + base_url=socket_path, client_version="1.35" + ) # TODO: Placeholder until Finch updates to Docker's min latest version def get_socket_path(self) -> str: """ diff --git a/tests/unit/local/docker/test_container_client.py b/tests/unit/local/docker/test_container_client.py index 501670a291d..7f47723ce45 100644 --- a/tests/unit/local/docker/test_container_client.py +++ b/tests/unit/local/docker/test_container_client.py @@ -22,6 +22,7 @@ ContainerArchiveImageLoadFailedException, ContainerInvalidSocketPathException, ) +from samcli.lib.constants import DOCKER_MIN_API_VERSION class BaseContainerClientTestCase(TestCase): @@ -31,7 +32,8 @@ def setUp(self): """Set up common test fixtures""" self.finch_socket = "unix:///tmp/finch.sock" self.docker_socket = "unix:///var/run/docker.sock" - self.default_version = "1.35" + self.docker_version = DOCKER_MIN_API_VERSION + self.finch_version = "1.35" # TODO: Update when Finch updates to latest Docker API version def create_mock_container_client(self, client_class, methods_to_bind=None): """Create a mock container client with bound methods for testing.""" @@ -163,7 +165,7 @@ def test_init_success_no_docker_host(self, mock_docker_init): # Verify DockerClient.__init__ was called with expected parameters mock_docker_init.assert_called_once() call_kwargs = mock_docker_init.call_args.kwargs - self.assertEqual(call_kwargs["version"], self.default_version) + self.assertEqual(call_kwargs["version"], self.docker_version) @patch("docker.DockerClient.__init__", return_value=None) def test_init_success_with_docker_host(self, mock_docker_init): @@ -176,7 +178,7 @@ def test_init_success_with_docker_host(self, mock_docker_init): # Verify DockerClient.__init__ was called with expected parameters mock_docker_init.assert_called_once() call_kwargs = mock_docker_init.call_args.kwargs - self.assertEqual(call_kwargs["version"], self.default_version) + self.assertEqual(call_kwargs["version"], self.docker_version) self.assertEqual(call_kwargs["base_url"], self.docker_socket) def test_init_raises_exception_when_docker_host_points_to_finch(self): @@ -208,7 +210,7 @@ def test_init_with_various_docker_host_values(self, docker_host, mock_log, mock_ # Verify DockerClient.__init__ was called with expected parameters mock_docker_init.assert_called_once() call_kwargs = mock_docker_init.call_args.kwargs - self.assertEqual(call_kwargs["version"], self.default_version) + self.assertEqual(call_kwargs["version"], self.docker_version) self.assertEqual(call_kwargs["base_url"], docker_host) # Verify log call @@ -678,7 +680,7 @@ def test_init_with_socket_path_success(self, mock_log, mock_docker_init): # Verify DockerClient.__init__ was called with expected parameters mock_docker_init.assert_called_once() call_kwargs = mock_docker_init.call_args.kwargs - self.assertEqual(call_kwargs["version"], self.default_version) + self.assertEqual(call_kwargs["version"], self.finch_version) self.assertEqual(call_kwargs["base_url"], self.finch_socket) # Verify log call @@ -719,12 +721,12 @@ class TestContainerClientBaseInit(BaseContainerClientTestCase): def test_init_no_overrides(self, mock_log, mock_docker_init): """Test ContainerClient init with no environment overrides""" with patch.dict("os.environ", {}, clear=True): - client = ConcreteContainerClient() + client = ConcreteContainerClient(client_version=self.docker_version) # Verify DockerClient.__init__ was called with expected parameters mock_docker_init.assert_called_once() call_kwargs = mock_docker_init.call_args.kwargs - self.assertEqual(call_kwargs["version"], self.default_version) + self.assertEqual(call_kwargs["version"], self.docker_version) self.assertTrue(mock_log.debug.called) @patch("docker.DockerClient.__init__", return_value=None) @@ -734,12 +736,12 @@ def test_init_with_base_url_override(self, mock_log, mock_docker_init): override_url = "unix:///tmp/finch.sock" with patch.dict("os.environ", {}, clear=True): - client = ConcreteContainerClient(base_url=override_url) + client = ConcreteContainerClient(client_version=self.docker_version, base_url=override_url) # Verify DockerClient.__init__ was called with expected parameters mock_docker_init.assert_called_once() call_kwargs = mock_docker_init.call_args.kwargs - self.assertEqual(call_kwargs["version"], self.default_version) + self.assertEqual(call_kwargs["version"], self.docker_version) self.assertEqual(call_kwargs["base_url"], override_url) self.assertTrue(mock_log.debug.called)