Skip to content

Commit 7387e0d

Browse files
committed
fix:ci-test
1 parent f2a6fe9 commit 7387e0d

3 files changed

Lines changed: 67 additions & 1 deletion

File tree

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ on:
1717
- 'RELEASING.md'
1818
- '.sdkmanrc'
1919
push:
20-
branches: [ main ]
20+
branches: [ fix/issue-10365-exit-docker ]
2121
paths-ignore:
2222
- '.github/ISSUE_TEMPLATE/*.yaml'
2323
- '.github/CODEOWNERS'

core/src/main/java/org/testcontainers/containers/GenericContainer.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,17 @@ public void stop() {
648648
imageName = "<unknown>";
649649
}
650650

651+
try {
652+
// タイムアウトはデフォルト(10秒)か、ユーザー指定の設定などがあればそれを使うべきですが、
653+
// いったんデフォルトの挙動として stopContainerCmd を呼びます。
654+
// DockerClientのstopContainerCmdはデフォルトで10秒待ちます。
655+
dockerClient.stopContainerCmd(containerId).exec();
656+
} catch (NotFoundException e) {
657+
// コンテナが既にない場合は無視
658+
} catch (Exception e) {
659+
// 停止に失敗した場合のログ(ResourceReaperが後で片付けるのでここではWarn程度)
660+
logger().warn("Failed to stop container gracefully: {}", e.getMessage());
661+
}
651662
containerIsStopping(containerInfo);
652663
ResourceReaper.instance().stopAndRemoveContainer(containerId, imageName);
653664
containerIsStopped(containerInfo);
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package org.testcontainers.containers;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.testcontainers.containers.output.ToStringConsumer;
5+
import org.testcontainers.images.builder.ImageFromDockerfile;
6+
7+
import java.time.Duration;
8+
9+
import static org.assertj.core.api.Assertions.assertThat;
10+
11+
public class Issue10365Test {
12+
13+
@Test
14+
public void testPostHookExecutionOnStop() {
15+
String scriptContent =
16+
"#!/bin/bash\n" +
17+
"function on_shutdown() {\n" +
18+
" echo 'HOOK_TRIGGERED'\n" +
19+
"}\n" +
20+
"trap on_shutdown SIGTERM SIGINT EXIT\n" +
21+
"echo 'CONTAINER_STARTED'\n" +
22+
"while true; do sleep 1; done\n";
23+
24+
try (
25+
GenericContainer<?> container = new GenericContainer<>(
26+
new ImageFromDockerfile()
27+
.withFileFromString("entrypoint.sh", scriptContent)
28+
.withDockerfileFromBuilder(builder ->
29+
builder
30+
.from("alpine:3.18")
31+
.run("apk add --no-cache tini bash")
32+
.copy("entrypoint.sh", "/entrypoint.sh")
33+
.run("chmod +x /entrypoint.sh")
34+
.entryPoint("/sbin/tini", "--", "/entrypoint.sh")
35+
.build()
36+
)
37+
)
38+
) {
39+
ToStringConsumer logConsumer = new ToStringConsumer();
40+
container.withLogConsumer(logConsumer);
41+
42+
container.withStartupTimeout(Duration.ofSeconds(30));
43+
44+
container.start();
45+
46+
container.stop();
47+
48+
String logs = logConsumer.toUtf8String();
49+
System.out.println("=== CONTAINER LOGS ===\n" + logs + "\n======================");
50+
51+
assertThat(logs)
52+
.contains("HOOK_TRIGGERED");
53+
}
54+
}
55+
}

0 commit comments

Comments
 (0)