func cleanDuplicateContainer(client *docker.Client, project Project) error { containers, err := client.ListContainers(docker.ListContainersOptions{All: true}) if err != nil { return err } for _, container := range containers { names := container.Names if len(names) > 0 && project.Name == strings.TrimLeft(names[0], "/") { if strings.Contains(container.Status, "Up") { fmt.Println("stopping", project.Name) if err := client.KillContainer(docker.KillContainerOptions{ID: container.ID}); err != nil { fmt.Println("could not stop container") return err } } if err := client.RemoveContainer(docker.RemoveContainerOptions{ ID: container.ID, }); err != nil { fmt.Println("could not remove container", err.Error()) return err } fmt.Println("removed duplicate container") break } } return nil }
func sendSignalToContainer(client *docker.Client, config Config) { if len(config.NotifyContainers) < 1 { return } for container, signal := range config.NotifyContainers { log.Printf("Sending container '%s' signal '%v'", container, signal) killOpts := docker.KillContainerOptions{ ID: container, Signal: signal, } if err := client.KillContainer(killOpts); err != nil { log.Printf("Error sending signal to container: %s", err) } } }
// removeContainer kills and removes a container func removeContainer(client *docker.Client, containerID string) { client.KillContainer(docker.KillContainerOptions{ID: containerID}) client.RemoveContainer(docker.RemoveContainerOptions{ID: containerID, RemoveVolumes: true, Force: true}) }