Running inside another container
'Docker wormhole' pattern - Sibling Docker containers
Docker-only example
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.
docker run -v /var/run/docker.sock.raw:/var/run/docker.sock $IMAGE dotnet test
Note
If you are using Docker Desktop, you need to configure the TESTCONTAINERS_HOST_OVERRIDE environment variable to use the special DNS name
host.docker.internal for accessing the host from within a container, which is provided by Docker Desktop:
-e TESTCONTAINERS_HOST_OVERRIDE=host.docker.internal
Docker Compose example
A minimal docker-compose.yml file that builds a new container image and runs the test inside the container look something like:
version: "3"
services:
  docker_compose_test:
    build:
      dockerfile: Dockerfile
      context: .
    entrypoint: dotnet
    command: test
    # Uncomment the lines below in the case of Docker Desktop (see note above).
    # TESTCONTAINERS_HOST_OVERRIDE is not needed in the case of Docker Engine. 
    # environment:
    #   - TESTCONTAINERS_HOST_OVERRIDE=host.docker.internal
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock