Skip to content

Commit 9c23b63

Browse files
committed
remove running containers in case of a sigterm
1 parent bd40965 commit 9c23b63

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

pkg/build/builder/dockerutil.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,15 +156,27 @@ func dockerRun(client DockerClient, createOpts docker.CreateContainerOptions, lo
156156

157157
containerName := containerNameOrID(c)
158158

159-
// Container was created, so we defer its removal.
160-
defer func() {
159+
// Container was created, so we defer its removal, and also remove it if we get a sigterm
160+
removalDone := make(chan struct{}, 1)
161+
removeContainer := func() {
161162
glog.V(4).Infof("Removing container %q ...", containerName)
162163
if err := client.RemoveContainer(docker.RemoveContainerOptions{ID: c.ID}); err != nil {
163164
glog.Warningf("Failed to remove container %q: %v", containerName, err)
164165
} else {
165166
glog.V(4).Infof("Removed container %q", containerName)
166167
}
168+
removalDone <- struct{}{}
169+
}
170+
go func() {
171+
sigchan := make(chan os.Signal, 1)
172+
signal.Notify(sigchan, os.Interrupt, syscall.SIGTERM)
173+
select {
174+
case <-sigchan:
175+
removeContainer()
176+
case <-removalDone:
177+
}
167178
}()
179+
defer removeContainer()
168180

169181
// Start the container.
170182
glog.V(4).Infof("Starting container %q ...", containerName)

0 commit comments

Comments
 (0)