Dear Etienne,
Thank you for the response, I appreciate it.
We have considered using a top-level Docker daemon, however the main problem that we're trying to solve with the docker container in integration testing is that our docker daemon has a lot of customisation requirements to make the system work. This currently in early development include:
- Having gVisor/runsc available
- The storage driver being backed by an XFS filesystem using prjquotas
- A custom daemon.json configuration
- Multiple services being present to run various services such as zombie process analysis. These services must run on the level that the daemon is running
As you can imagine, this is a lot to set up for someone who wants to run integration tests locally, especially considering that I for example am running Windows.
So the point was to be able to press a button in our Gradle configuration, and tada, you have your test results. If we move the daemon to the top-level, then all these requirements need to be done on the host, which defeats the purpose.
Interestingly, running "docker run --runtime=runsc {image}" Inside our DIND container actually seemed to work perfectly fine. It's only when our program is trying to run a gVisor container, is when it breaks.
I've included an image of our integration testing setup. The inner DIND daemon is passed to the companion container (which is the system we're testing) using the
-v /var/run/docker.sock:/var/run/docker.sock
Our docker-compose looks as follows:
services:
companion:
image: companion-container
ports:
- 9000:9000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
user: root
privileged: true
tester:
image: integration-tester