testcontainers / testcontainers-dotnet

A library to support tests with throwaway instances of Docker containers for all compatible .NET Standard versions.
https://dotnet.testcontainers.org
MIT License
3.73k stars 262 forks source link

[Bug]: ResourceReaperException when using dotner/sdk:7.0 #1006

Closed EniacMlezi closed 11 months ago

EniacMlezi commented 11 months ago

Testcontainers version

3.5.0

Using the latest Testcontainers version?

Yes

Host OS

Windows

Host arch

amd64

.NET version

7.0.11

Docker version

Client:
 Cloud integration: v1.0.35+desktop.4
 Version:           24.0.6
 API version:       1.43
 Go version:        go1.20.7
 Git commit:        ed223bc
 Built:             Mon Sep  4 12:32:48 2023
 OS/Arch:           windows/amd64
 Context:           default

Server: Docker Desktop 4.23.0 (120376)
 Engine:
  Version:          24.0.6
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.7
  Git commit:       1a79695
  Built:            Mon Sep  4 12:32:16 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.22
  GitCommit:        8165feabfdfe38c65b599c4993d227328c231fca
 runc:
  Version:          1.1.8
  GitCommit:        v1.1.8-0-g82f18fe
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Docker info

Client:
 Version:    24.0.6
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.11.2-desktop.4
    Path:     C:\Program Files\Docker\cli-plugins\docker-buildx.exe
  compose: Docker Compose (Docker Inc.)
    Version:  v2.21.0-desktop.1
    Path:     C:\Program Files\Docker\cli-plugins\docker-compose.exe
  dev: Docker Dev Environments (Docker Inc.)
    Version:  v0.1.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-dev.exe
  extension: Manages Docker extensions (Docker Inc.)
    Version:  v0.2.20
    Path:     C:\Program Files\Docker\cli-plugins\docker-extension.exe
  init: Creates Docker-related starter files for your project (Docker Inc.)
    Version:  v0.1.0-beta.7
    Path:     C:\Program Files\Docker\cli-plugins\docker-init.exe
  sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc.)
    Version:  0.6.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-sbom.exe
  scan: Docker Scan (Docker Inc.)
    Version:  v0.26.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-scan.exe
  scout: Command line tool for Docker Scout (Docker Inc.)
    Version:  0.24.1
    Path:     C:\Program Files\Docker\cli-plugins\docker-scout.exe

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 32
 Server Version: 24.0.6
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 8165feabfdfe38c65b599c4993d227328c231fca
 runc version: v1.1.8-0-g82f18fe
 init version: de40ad0
 Security Options:
  seccomp
   Profile: unconfined
 Kernel Version: 5.10.16.3-microsoft-standard-WSL2
 Operating System: Docker Desktop
 OSType: linux
 Architecture: x86_64
 CPUs: 20
 Total Memory: 7.614GiB
 Name: docker-desktop
 ID: cf96d11f-1e4a-46f6-9cb5-9ac8eb3737c2
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 No Proxy: hubproxy.docker.internal
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5555
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
WARNING: daemon is not using the default seccomp profile

What happened?

When running dotnet test from a docker container (mcr.microsoft.com/dotnet/sdk:7.0), I get ResourceReaperException: Initialization has been cancelled..

I start the docker container like this: docker run -it --rm -v ${PWD}:/src -v /var/run/docker.sock:/var/run/docker.sock mcr.microsoft.com/dotnet/sdk:7.0

Relevant log output

PS C:\Users\larsg\source\repos\TestContainers_Issue> docker run -it --rm -v ${PWD}:/src -v /var/run/docker.sock:/var/run/docker.sock mcr.microsoft.com/dotnet/sdk:7.0
root@1a469686f110:/# cd /src/TestContiainerResourceException/
root@1a469686f110:/src/TestContiainerResourceException# dotnet test /warnaserror
  Determining projects to restore...
  Restored /src/TestContiainerResourceException/TestContiainerResourceException.csproj (in 3.67 sec).
  TestContiainerResourceException -> /src/TestContiainerResourceException/bin/Debug/net7.0/TestContiainerResourceException.dll
Test run for /src/TestContiainerResourceException/bin/Debug/net7.0/TestContiainerResourceException.dll (.NETCoreApp,Version=v7.0)
Microsoft (R) Test Execution Command Line Tool Version 17.7.1 (x64)
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
  Failed TestMethod1 [1 m 1 s]
  Error Message:
   Test method TestContiainerResourceException.Test.TestMethod1 threw exception:
DotNet.Testcontainers.Containers.ResourceReaperException: Initialization has been cancelled.
  Stack Trace:
      at DotNet.Testcontainers.Containers.ResourceReaper.GetAndStartNewAsync(Guid sessionId, IDockerEndpointAuthenticationConfiguration dockerEndpointAuthConfig, IImage resourceReaperImage, IMount dockerSocket, Boolean requiresPrivilegedMode, TimeSpan initTimeout, CancellationToken ct)
   at DotNet.Testcontainers.Containers.ResourceReaper.GetAndStartNewAsync(Guid sessionId, IDockerEndpointAuthenticationConfiguration dockerEndpointAuthConfig, IImage resourceReaperImage, IMount dockerSocket, Boolean requiresPrivilegedMode, TimeSpan initTimeout, CancellationToken ct)
   at DotNet.Testcontainers.Containers.ResourceReaper.GetAndStartDefaultAsync(IDockerEndpointAuthenticationConfiguration dockerEndpointAuthConfig, Boolean isWindowsEngineEnabled, CancellationToken ct)
   at DotNet.Testcontainers.Clients.TestcontainersClient.RunAsync(IContainerConfiguration configuration, CancellationToken ct)
   at DotNet.Testcontainers.Containers.DockerContainer.UnsafeCreateAsync(CancellationToken ct)
   at DotNet.Testcontainers.Containers.DockerContainer.StartAsync(CancellationToken ct)
   at TestContiainerResourceException.Test.TestMethod1() in /src/TestContiainerResourceException/Test.cs:line 14
   at Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.ThreadOperations.ExecuteWithAbortSafety(Action action)

  Standard Output Messages:
 [testcontainers.org 00:00:00.04] Connected to Docker:
   Host: unix:///var/run/docker.sock
   Server Version: 24.0.6
   Kernel Version: 5.10.16.3-microsoft-standard-WSL2
   API Version: 1.43
   Operating System: Docker Desktop
   Total Memory: 7.61 GB
 [testcontainers.org 00:00:00.23] Docker container c0dbbe3ec05c created
 [testcontainers.org 00:00:00.27] Start Docker container c0dbbe3ec05c
 [testcontainers.org 00:00:01.73] Wait for Docker container c0dbbe3ec05c to complete readiness checks
 [testcontainers.org 00:00:01.73] Docker container c0dbbe3ec05c ready

Failed!  - Failed:     1, Passed:     0, Skipped:     0, Total:     1, Duration: 1 m 1 s - TestContiainerResourceException.dll (net7.0)

Additional information

Test class:

[TestClass]
 public class Test
 {
     private readonly MsSqlContainer _dbContainer = new MsSqlBuilder()
         .WithNetworkAliases()
         .Build();

     [TestMethod]
     public async Task TestMethod1()
     {
         await _dbContainer.StartAsync();
     }
 }
HofmeisterAn commented 11 months ago

As mentioned in our docs, please try mounting the raw socket.

EniacMlezi commented 11 months ago

Works, thanks!