Skip to content

Commit 5152cff

Browse files
authored
feat: Always use Docker's assigned random host port (Ryuk) (#852)
1 parent 2a3688d commit 5152cff

File tree

5 files changed

+16
-3
lines changed

5 files changed

+16
-3
lines changed

docs/examples/compose.md renamed to docs/examples/dind.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
1-
# Compose
1+
# Running inside another container
22

33
## Docker Desktop
44

5+
### Sibling containers
6+
7+
If you choose to run your tests in a Docker Wormhole configuration, which involves using sibling containers, it is necessary to mount Docker's raw socket `/var/run/docker.sock.raw`. You find more information and an explanation of the Docker bug in this [comment](https://github.com/docker/for-mac/issues/5588#issuecomment-934600089).
8+
9+
```console
10+
docker run -v /var/run/docker.sock.raw:/var/run/docker.sock $IMAGE dotnet test
11+
```
12+
13+
### Compose
14+
515
To use Docker's Compose tool to build and run a Testcontainers environment in a Docker Desktop Wormhole configuration,
616
it is necessary to override Testcontainers' Docker host resolution and set the environment variable `TESTCONTAINERS_HOST_OVERRIDE` to `host.docker.internal`.
717
Otherwise, Testcontainers cannot access sibling containers like the Resource Reaper Ryuk or other services running on the Docker host.

mkdocs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ nav:
3232
- api/wait_strategies.md
3333
- api/best_practices.md
3434
- Examples:
35-
- examples/compose.md
35+
- examples/dind.md
3636
- examples/aspnet.md
3737
- Modules:
3838
- modules/index.md

src/Testcontainers/Builders/ContainerBuilder`3.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,9 @@ public TBuilderEntity WithPortBinding(string port, bool assignRandomHostPort = f
182182
/// <inheritdoc cref="IContainerBuilder{TBuilderEntity, TContainerEntity}" />
183183
public TBuilderEntity WithPortBinding(string hostPort, string containerPort)
184184
{
185+
// Remove this together with TestcontainersSettings.ResourceReaperPublicHostPort.
186+
hostPort = "0".Equals(hostPort, StringComparison.OrdinalIgnoreCase) ? string.Empty : hostPort;
187+
185188
var portBindings = new Dictionary<string, string> { { containerPort, hostPort } };
186189
return Clone(new ContainerConfiguration(portBindings: portBindings)).WithExposedPort(containerPort);
187190
}

src/Testcontainers/Configurations/TestcontainersSettings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ static TestcontainersSettings()
140140
/// - https://github.com/docker/for-win/issues/11584.
141141
/// </remarks>
142142
[NotNull]
143+
[Obsolete("The Resource Reaper will use Docker's assigned random host port. This property is no longer supported. For DinD configurations see: https://dotnet.testcontainers.org/examples/dind/.")]
143144
public static Func<IDockerEndpointAuthenticationConfiguration, ushort> ResourceReaperPublicHostPort { get; set; }
144145
= _ => 0;
145146

src/Testcontainers/Containers/ResourceReaper.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ private ResourceReaper(Guid sessionId, IDockerEndpointAuthenticationConfiguratio
6161
.WithPrivileged(requiresPrivilegedMode)
6262
.WithAutoRemove(true)
6363
.WithCleanUp(false)
64-
.WithExposedPort(RyukPort)
6564
.WithPortBinding(TestcontainersSettings.ResourceReaperPublicHostPort.Invoke(dockerEndpointAuthConfig), RyukPort)
6665
.WithMount(dockerSocket)
6766
.Build();

0 commit comments

Comments
 (0)