testcontainers / testcontainers/testcontainers-java
How to make sure there's no stray container not removed when using withDockerfileFromBuilder?
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Java
- Sterne
- 8.7k
- Forks
- 1.9k
- Ø Merge
- 2 T. 17 Std.
- Gemergte PRs (30 T.)
- 9
Beschreibung
Hi guys,
On XWiki, and since the upgrade to TC 1.15.0 (might not be related but didn't notice it before), I've noticed on our CI agents, that there are some TC-created containers that are not always removed on agents. For example:
These containers are created with the following:
LOGGER.info("(*) Build a dedicated image embedding LibreOffice...");
// The second argument of the ImageFromDockerfile is here to indicate we won't delete the image
// at the end of the test container execution.
container = new XWikiLocalGenericContainer(new ImageFromDockerfile(imageName, false)
.withDockerfileFromBuilder(builder -> {
builder
.from(baseImageName)
.user("root")
.env("LIBREOFFICE_VERSION", officeVersion)
.env("LIBREOFFICE_DOWNLOAD_URL", "https://downloadarchive.documentfoundation.org/"
+ "libreoffice/old/$LIBREOFFICE_VERSION/deb/x86_64/"
+ "LibreOffice_${LIBREOFFICE_VERSION}_Linux_x86-64_deb.tar.gz")
// Note that we expose libreoffice /usr/local/libreoffice so that it can be found by
// JODConverter: https://bit.ly/2w8B82Q
.run("apt-get update && "
+ "apt-get --no-install-recommends -y install curl unzip procps libxinerama1 "
+ "libdbus-glib-1-2 libcairo2 libcups2 libsm6 && "
+ "rm -rf /var/lib/apt/lists/* /var/cache/apt/* && "
+ "wget --no-verbose -O /tmp/libreoffice.tar.gz $LIBREOFFICE_DOWNLOAD_URL && "
+ "mkdir /tmp/libreoffice && "
+ "tar -C /tmp/ -xvf /tmp/libreoffice.tar.gz && "
+ "cd /tmp/LibreOffice_${LIBREOFFICE_VERSION}_Linux_x86-64_deb/DEBS && "
+ "dpkg -i *.deb && "
+ "ln -fs `ls -d /opt/libreoffice*` /opt/libreoffice")
// Increment the image version whenever a change is brought to the image so that it can
// reconstructed on all machines needing it.
.label(OFFICE_IMAGE_VERSION_LABEL, imageVersion);
if (this.testConfiguration.getServletEngine() == ServletEngine.JETTY) {
// Create the right jetty user directory since it doesn't exist
builder.run("mkdir -p /home/jetty && chown jetty:jetty /home/jetty")
// Put back the user as jetty since it's a best practice to not execute the container as
// root.
.user("jetty");
}
builder.build();
}));
Would you have any idea what could be happening and what we could do?
Thanks a lot
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne bei ServletContainerExecutor.java um Zeile 286 und verfolge die im Issue gezeigte Verwendung von withDockerfileFromBuilder. Reproduziere das CI-agent-Szenario mit dem referenzierten Container und untersuche das Cleanup-Verhalten von Testcontainers. Die Aufgabe ist abgeschlossen, wenn du feststellst, warum erstellte Container bestehen bleiben, und einen verifizierten Cleanup-Fix dokumentierst oder implementierst.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- docker, java
- Bereich
- devops, testing
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 25/100