Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lambda container not being removed automatically #848

Open
ksiczek opened this issue Oct 24, 2024 · 4 comments
Open

Lambda container not being removed automatically #848

ksiczek opened this issue Oct 24, 2024 · 4 comments
Labels
enhancement New feature or request good first issue Good for newcomers

Comments

@ksiczek
Copy link

ksiczek commented Oct 24, 2024

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?

@cristianrgreco
Copy link
Collaborator

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.

@ksiczek
Copy link
Author

ksiczek commented Oct 24, 2024

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.

@cristianrgreco
Copy link
Collaborator

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?

@eddumelendez
Copy link
Member

This PR from Testcontainers for Java can help.

@cristianrgreco cristianrgreco added enhancement New feature or request good first issue Good for newcomers labels Nov 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

3 participants