Skip to content

Commit c757142

Browse files
committed
Add support for network aliases
1 parent e4d9c19 commit c757142

File tree

3 files changed

+32
-14
lines changed

3 files changed

+32
-14
lines changed

core/testcontainers/core/container.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ def __init__(self, image: str, docker_client_kw: Optional[dict] = None, **kwargs
3333
self._command = None
3434
self._name = None
3535
self._network: Optional[Network] = None
36+
self._network_aliases: Optional[list] = None
3637
self._kwargs = kwargs
3738

3839
def with_env(self, key: str, value: str) -> 'DockerContainer':
@@ -52,6 +53,10 @@ def with_network(self, network: Network) -> 'DockerContainer':
5253
self._network = network
5354
return self
5455

56+
def with_network_aliases(self, *aliases) -> 'DockerContainer':
57+
self._network_aliases = aliases
58+
return self
59+
5560
def with_kwargs(self, **kwargs) -> 'DockerContainer':
5661
self._kwargs = kwargs
5762
return self
@@ -70,7 +75,7 @@ def start(self) -> 'DockerContainer':
7075
)
7176
logger.info("Container started: %s", self._container.short_id)
7277
if self._network:
73-
self._network.connect(self._container.id)
78+
self._network.connect(self._container.id, self._network_aliases)
7479
return self
7580

7681
def stop(self, force=True, delete_volume=True) -> None:

core/testcontainers/core/network.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ def __init__(self, docker_client_kw: Optional[dict] = None, **kwargs) -> None:
2626
self._docker = DockerClient(**(docker_client_kw or {}))
2727
self._kwargs = kwargs
2828

29-
def connect(self, container_id: str):
30-
self._network.connect(container_id)
29+
def connect(self, container_id: str, network_aliases: Optional[list] = None):
30+
self._network.connect(container_id, aliases=network_aliases)
3131

3232
def remove(self) -> None:
3333
self._network.remove()

core/tests/test_network.py

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from testcontainers.core.docker_client import DockerClient
33
from testcontainers.core.network import Network
44

5+
NGINX_ALPINE_SLIM_IMAGE = "nginx:alpine-slim"
6+
57

68
def test_network_gets_created_and_cleaned_up():
79
with Network() as network:
@@ -14,14 +16,25 @@ def test_network_gets_created_and_cleaned_up():
1416

1517
def test_containers_can_communicate_over_network():
1618
with Network() as network:
17-
with DockerContainer("nginx:alpine-slim").with_name(
18-
"alpine1").with_network(network) as alpine1:
19-
with DockerContainer("nginx:alpine-slim").with_name(
20-
"alpine2").with_network(network) as alpine2:
21-
status, output = alpine1.exec("ping -c 1 alpine2")
22-
assert status == 0
23-
assert "64 bytes" in str(output)
24-
25-
status, output = alpine2.exec("ping -c 1 alpine1")
26-
assert status == 0
27-
assert "64 bytes" in str(output)
19+
with DockerContainer(NGINX_ALPINE_SLIM_IMAGE)\
20+
.with_name("alpine1")\
21+
.with_network_aliases("alpine1-alias-1", "alpine1-alias-2")\
22+
.with_network(network) as alpine1:
23+
with DockerContainer(NGINX_ALPINE_SLIM_IMAGE)\
24+
.with_name("alpine2")\
25+
.with_network_aliases("alpine2-alias-1", "alpine2-alias-2")\
26+
.with_network(network) as alpine2:
27+
28+
assert_can_ping(alpine1, "alpine2")
29+
assert_can_ping(alpine1, "alpine2-alias-1")
30+
assert_can_ping(alpine1, "alpine2-alias-2")
31+
32+
assert_can_ping(alpine2, "alpine1")
33+
assert_can_ping(alpine2, "alpine1-alias-1")
34+
assert_can_ping(alpine2, "alpine1-alias-2")
35+
36+
37+
def assert_can_ping(container: DockerContainer, remote_name: str):
38+
status, output = container.exec("ping -c 1 %s" % remote_name)
39+
assert status == 0
40+
assert "64 bytes" in str(output)

0 commit comments

Comments
 (0)