From 18d98b11f941cdadb4a8e0e8c75a31de3ef266f8 Mon Sep 17 00:00:00 2001 From: Romain Geissler Date: Sat, 27 Apr 2024 10:26:33 +0000 Subject: [PATCH] Run containers with --init by default to avoid leaking zombie processes. People running containers manually usually run with pid 1 being a $SHELL, in which case waiting for child termination is something implemented already as it's the core job of a $SHELL. However with this jenkins plugin the command run is usually "cat" on Linux, which doesn't wait at all for children. To have in jenkins a situation a bit like during interactive container experience, start containers with --init so zombie processes are correctly reaped. --- .../jenkinsci/plugins/docker/workflow/client/DockerClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/jenkinsci/plugins/docker/workflow/client/DockerClient.java b/src/main/java/org/jenkinsci/plugins/docker/workflow/client/DockerClient.java index b36b6fd91..d5fb56897 100644 --- a/src/main/java/org/jenkinsci/plugins/docker/workflow/client/DockerClient.java +++ b/src/main/java/org/jenkinsci/plugins/docker/workflow/client/DockerClient.java @@ -116,7 +116,7 @@ public DockerClient(@NonNull Launcher launcher, @CheckForNull Node node, @CheckF public String run(@NonNull EnvVars launchEnv, @NonNull String image, @CheckForNull String args, @CheckForNull String workdir, @NonNull Map volumes, @NonNull Collection volumesFromContainers, @NonNull EnvVars containerEnv, @NonNull String user, @NonNull String... command) throws IOException, InterruptedException { ArgumentListBuilder argb = new ArgumentListBuilder(); - argb.add("run", "-t", "-d"); + argb.add("run", "-t", "-d", "--init"); // Username might be empty because we are running on Windows if (StringUtils.isNotEmpty(user)) {