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
[Bug]: Ryuk might shutdown reused Container while connected to it #2445
Comments
As I know reaper is grabbing containers by labels, where session id is already stored. Could you please attach labels with your case? |
Yes, that is correct. Reaper will kill the container based on the matching Containers created on first test run:
Now I'm running tests for a second time, see the output, where the ClickHouse container with ID
At some point during the test, the previous Reaper kills the existing ClickHouse, as you can see with the mapped port returning EOF. And a new container is created:
A new container is created, but the killed container already causes some tests to fail. |
I'm not sure if it is related, but I ran into an issue when I moved tests into different packages (so different TestMain to setup testcontainers k3s). After one package finished, the next dies unless I disable ryuk
|
I think that could indeed be related. Two packages run with two different So either Reaper should be fully re-used as well, with the same semantics (e.g. SessionID not part of the container name), or the 'reused' container needs to be scoped to the session / package as well. Now I could see both making sense from a user perspective, so it has to be a config option somehow. |
I think I'm being hit by the same problem - I have two separate packages using the same
As a workaround, I'm setting |
Testcontainers version
0.29.1
Using the latest Testcontainers version?
Yes
Host OS
Linux
Host arch
x86
Go version
1.22
Docker version
Docker info
What happened?
As I was improving some integration tests in our own project, I sometimes noticed failures after we switched to reusing containers. Since I was improving the run-time of the tests, I was executing ITs several times after each other to make sure code compilation was not included in the time (
while go clean -testcache && make integration-test; do :; done
. I had a suspicion that me quickly running tests after each other was related to the failures so I did some further investigation.From testcontainers output I saw several times that more than 1 container was created (while
Reuse: true
):As you see, in the same test-run a new ClickHouse container gets created while we never call
Terminate
. Tests start failing as they can no longer connect to the old container (to which they hold a connection based on the mapped port).My suspicion was that Ryuk was for some reason terminating the 'old' ClickHouse container, still live from a previous run.
Looking at the code, this appears indeed what is causing it:
testcontainers-go/docker.go
Line 1177 in c83b93c
SessionID
:testcontainers-go/docker.go
Line 1201 in c83b93c
To fix this, my proposal would be to somehow add the
SessionID
also to the 'reusable' container name. Either implicitly or by some flag or by exposing theSessionID
so the user can add it (currently it's part of theinternal
package so not reachable).I'm happy to work on a fix, if I can get any suggestion for a preferred approach.
Relevant log output
docker ps -a
output after the failure, showing two reapers and one CH container:Additional information
No response
The text was updated successfully, but these errors were encountered: