Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions samcli/cli/global_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ class GlobalConfig(metaclass=Singleton):
# Env var used by docker client to specify which socket to use
DOCKER_HOST_ENV_VAR: str = "DOCKER_HOST"

# Env var used to override docker API version to use
DOCKER_API_ENV_VAR: str = "SAM_DOCKER_API_VERSION"

# Static singleton instance

_access_lock: threading.RLock
Expand Down
3 changes: 2 additions & 1 deletion samcli/local/docker/container_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import docker
from docker.utils import kwargs_from_env

from samcli.cli.global_config import GlobalConfig
from samcli.lib.constants import DOCKER_MIN_API_VERSION, DOCKER_MIN_API_VERSION_FALLBACK
from samcli.local.docker.exceptions import ContainerArchiveImageLoadFailedException, ContainerInvalidSocketPathException
from samcli.local.docker.platform_config import get_finch_socket_path
Expand Down Expand Up @@ -94,7 +95,7 @@ def __init__(self, base_url=None):
self.client_params["base_url"] = base_url

# Specify minimum version
self.client_params["version"] = DOCKER_MIN_API_VERSION
self.client_params["version"] = os.environ.get(GlobalConfig.DOCKER_API_ENV_VAR, DOCKER_MIN_API_VERSION)

# Initialize DockerClient with processed parameters
LOG.debug(f"Creating container client with parameters: {self.client_params}")
Expand Down
14 changes: 14 additions & 0 deletions tests/unit/local/docker/test_container_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import docker
from parameterized import parameterized

from samcli.cli.global_config import GlobalConfig
from samcli.local.docker.container_client import (
ContainerClient,
DockerContainerClient,
Expand Down Expand Up @@ -749,6 +750,19 @@ def test_init_with_base_url_override(self, mock_log, mock_docker_init):
self.assertEqual(call_kwargs["base_url"], override_url)
self.assertTrue(mock_log.debug.called)

@patch("docker.DockerClient.__init__", return_value=None)
def test_init_with_api_override(self, mock_docker_init):
"""Test ContainerClient init with api override"""
override_api = "1.51"

with patch.dict("os.environ", {GlobalConfig.DOCKER_API_ENV_VAR: override_api}, clear=True):
client = ConcreteContainerClient()

# 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"], override_api)


class TestContainerClientBaseClass(TestCase):
"""Test the ContainerClient base class methods"""
Expand Down
Loading