Garbage Collector
Usually, one test creates at least one container. At the end it means a lot of containers running. We need to have a way to keep the CI servers reliable removing unused containers.
Containers can be unused because:
- Test is over and the container is not needed anymore.
- Test failed, we do not need that container anymore because next build will create new containers.
Terminate function
As we saw previously there are at least two ways to remove unused containers.
The first one is to use the Terminate(context.Conext)
function available when a
container is created. You can call it in your test or you use defer
.
Tip
Remember to defer
as soon as possible so you won't forget. The best time
is as soon as you call testcontainers.GenericContainer
but remember to
check for the err
first.
Ryuk
https://github.com/testcontainers/moby-ryuk helps you to remove containers/networks/volumes by given filter after specified delay.
It is a project developed by TestContainers, and it is used across the board for Java, Go and any more.
When you run one test, you will see that there is not only the containers your
tests requires running, there is another one called ryuk
. We refer to it as
Reaper
as well in this library.
Based on container labels it removes resources created from testcontainers that are running for more than 10 minutes.
Tip
This feature can be disabled when creating a container
In this way even if you do not call Terminate, something will keep your environment clean. It will also clean itself when there is nothing left to do.