func (t *Task) forwardSignals(client client.DockerClient, containerID string) chan<- os.Signal { chanSig := make(chan os.Signal, 128) // TODO: not all of these exist on windows? signal.Notify(chanSig, syscall.SIGINT, syscall.SIGTERM) kill := func(sig os.Signal) { t.logger().WithFields(log.Fields{"signal": sig}).Debug("received") intSig, ok := sig.(syscall.Signal) if !ok { t.logger().WithFields(log.Fields{"signal": sig}).Warnf( "Failed to convert signal from %T", sig) return } if err := client.KillContainer(docker.KillContainerOptions{ ID: containerID, Signal: docker.Signal(intSig), }); err != nil { t.logger().WithFields(log.Fields{"signal": sig}).Warnf( "Failed to send signal: %s", err) } } go func() { for sig := range chanSig { kill(sig) } }() return chanSig }