func startAnalyzers(sourceDir string, images []string, dind bool) (containers []string, errs []error) { var wg sync.WaitGroup for id, fullImage := range images { wg.Add(1) go func(id int, image string) { analyzerContainer, port := getContainerAndAddress(image, id) if docker.ImageMatches(image, analyzerContainer) { glog.Infof("Reusing analyzer %v started at localhost:%d", image, port) } else { glog.Infof("Found no analyzer container (%v) to reuse for %v", analyzerContainer, image) // Analyzer is either running with the wrong image version, or not running // Stopping in case it's the first case result := docker.Stop(analyzerContainer, 0, true) if result.Err != nil { glog.Infof("Failed to stop %v (may not be running)", analyzerContainer) } result = docker.RunAnalyzer(image, analyzerContainer, sourceDir, localLogs, port, dind) if result.Err != nil { glog.Infof("Could not start %v at localhost:%d: %v, stderr: %v", image, port, result.Err.Error(), result.Stderr) errs = append(errs, result.Err) } else { glog.Infof("Analyzer %v started at localhost:%d", image, port) containers = append(containers, analyzerContainer) } } wg.Done() }(id, fullImage) } if len(images) > 0 { glog.Info("Waiting for dockerized analyzers to start up...") wg.Wait() glog.Info("Analyzers up") } return containers, errs }
func stop(container string, timeWait time.Duration) { glog.Infof("Stopping and removing %s", container) result := docker.Stop(container, timeWait, true) printStreams(result) if result.Err != nil { glog.Infof("Could not stop %s: %v", container, result.Err) } else { glog.Infoln("Removed.") } }
func cleanExistingContainer(t *testing.T, container string) { exists, err := docker.ContainerExists(container) if err != nil { t.Fatalf("Problem checking docker state; err: %v", err) } if exists { if result := docker.Stop(container, 0, true); result.Err != nil { t.Fatalf("Problem cleaning up the docker state; err: %v", result.Err) } } }