Lambda container not being removed automatically
Hi there!
I was doing some testing with Testcontainers and LocalStack. I created a container as the docs say, but it turned out that when I stopped it, the lambda container was left started. I found a similar issue in the Java implementation so I tried porting it to my Node solution, ending up with something like:
before(async () => {
const resourceReaper = await getContainerRuntimeClient().then(crc => getReaper(crc))
container = await new LocalstackContainer('localstack/localstack:latest')
.withEnvironment(
{
SERVICES: 's3,lambda',
EAGER_SERVICE_LOADING: '1'
}
)
// below is needed so the lambda service could create a docker image for itself
.withBindMounts([{
source: "/var/run/docker.sock",
target: "/var/run/docker.sock"
}])
.withEnvironment(
{
/**
* Localstack lambda spins a new Docker container up but the container is not removed by
* Testcontainers resource reaper unless we pass a label indicating the session id.
*/
LAMBDA_DOCKER_FLAGS: `-l org.testcontainers.session-id=${resourceReaper.sessionId}`
}
)
.start();
[...]
})
Can you make this out-of-the-box solution, please? I found those orphan containers only because I started having issues with resources and it seems the LocalStack has no way to integrate with the resource reaper. If not, then maybe you could mention this in the docs? WDYT?
Hi, I'm not entirely sure what's the problem here. The LocalStack container is automatically cleaned up by the resource reaper like all other containers, there is no exception for it. The LocalStack container is tested in this repo's CICD pipelines and it terminates without issue. Perhaps you could provide some repro.
The problem is that the LocalStack lambda service creates a separate container (from the public.ecr.aws/lambda/nodejs:20 image) from the main one and the additional container is not cleaned up when Testcontainers shuts down. I can provide an example, I just thought the testcontainers-java issue would be enough since the issue seemed language-agnostic to me.
I'm not sure what kind of tests you mean, or whether you start lambdas there, but you might not notice any dangling containers if you start with a clean Docker each time.
Anyway, I read your response that my request might be unclear and I'll try to refine it.
Oh I see, the LocalStackContainer creates additional containers, OK.
Would you be able to raise a PR to add LAMBDA_DOCKER_FLAGS: -l org.testcontainers.session-id=${resourceReaper.sessionId} as an env var to the LocalStackContainer, and add a test which uses lambda and ensure the containers are cleared up?
This PR from Testcontainers for Java can help.
hi @cristianrgreco @ksiczek ,
Please find this PR that fixes this issue. I didn't add a test which uses lambda, as it requires a lot of boiler plate to be run. I rather verify with a simple unit test, that LAMBDA_DOCKER_FLAGS is set with reaper sessionId
I've tested with the 10.20.0 and it works like a charm. Thank you so much!