6
6
from pathlib import Path
7
7
from typing import Optional , Union
8
8
9
+ import docker
10
+
9
11
10
12
class ConnectionMode (Enum ):
11
13
bridge_ip = "bridge_ip"
@@ -24,14 +26,30 @@ def use_mapped_port(self) -> bool:
24
26
return True
25
27
26
28
29
+ def get_docker_socket () -> str :
30
+ """
31
+ Determine the docker socket, prefer value given by env variable
32
+
33
+ Using the docker api ensure we handle rootless docker properly
34
+ """
35
+ if socket_path := environ .get ("TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE" ):
36
+ return socket_path
37
+
38
+ client = docker .from_env ()
39
+ try :
40
+ return client .api .get_adapter (client .api .base_url ).socket_path
41
+ except AttributeError :
42
+ return "/var/run/docker.sock"
43
+
44
+
27
45
MAX_TRIES = int (environ .get ("TC_MAX_TRIES" , 120 ))
28
46
SLEEP_TIME = int (environ .get ("TC_POOLING_INTERVAL" , 1 ))
29
47
TIMEOUT = MAX_TRIES * SLEEP_TIME
30
48
31
49
RYUK_IMAGE : str = environ .get ("RYUK_CONTAINER_IMAGE" , "testcontainers/ryuk:0.8.1" )
32
50
RYUK_PRIVILEGED : bool = environ .get ("TESTCONTAINERS_RYUK_PRIVILEGED" , "false" ) == "true"
33
51
RYUK_DISABLED : bool = environ .get ("TESTCONTAINERS_RYUK_DISABLED" , "false" ) == "true"
34
- RYUK_DOCKER_SOCKET : str = environ . get ( "TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE" , "/var/run/docker.sock" )
52
+ RYUK_DOCKER_SOCKET : str = get_docker_socket ( )
35
53
RYUK_RECONNECTION_TIMEOUT : str = environ .get ("RYUK_RECONNECTION_TIMEOUT" , "10s" )
36
54
TC_HOST_OVERRIDE : Optional [str ] = environ .get ("TC_HOST" , environ .get ("TESTCONTAINERS_HOST_OVERRIDE" ))
37
55
0 commit comments