// Stop stops the currently running origin container and any // containers started by the node. func (c *ClientStopConfig) Stop(out io.Writer) error { client, err := c.getDockerClient(out) if err != nil { return err } helper := dockerhelper.NewHelper(client, nil) glog.V(4).Infof("Killing previous socat tunnel") err = openshift.KillExistingSocat() if err != nil { glog.V(1).Infof("error: cannot kill socat: %v", err) } glog.V(4).Infof("Stopping and removing origin container") if err = helper.StopAndRemoveContainer("origin"); err != nil { glog.V(1).Infof("Error stopping origin container: %v", err) } names, err := helper.ListContainerNames() if err != nil { return err } for _, name := range names { if _, _, err = dockertools.ParseDockerName(name); err != nil { continue } name = strings.TrimLeft(name, "/") glog.V(4).Infof("Stopping container %s", name) if err = client.StopContainer(name, 0); err != nil { glog.V(1).Infof("Error stopping container %s: %v", name, err) } glog.V(4).Infof("Removing container %s", name) if err = helper.RemoveContainer(name); err != nil { glog.V(1).Infof("Error removing container %s: %v", name, err) } } return nil }
// Get all containers that are evictable. Evictable containers are: not running // and created more than MinAge ago. func (cgc *realContainerGC) evictableContainers() (containersByEvictUnit, []containerGCInfo, error) { containers, err := dockertools.GetKubeletDockerContainers(cgc.dockerClient, true) if err != nil { return containersByEvictUnit{}, []containerGCInfo{}, err } unidentifiedContainers := make([]containerGCInfo, 0) evictUnits := make(containersByEvictUnit) newestGCTime := time.Now().Add(-cgc.policy.MinAge) for _, container := range containers { // Prune out running containers. data, err := cgc.dockerClient.InspectContainer(container.ID) if err != nil { // Container may have been removed already, skip. continue } else if data.State.Running { continue } else if newestGCTime.Before(data.Created) { continue } containerInfo := containerGCInfo{ id: container.ID, name: container.Names[0], createTime: data.Created, } containerName, _, err := dockertools.ParseDockerName(container.Names[0]) if err != nil { unidentifiedContainers = append(unidentifiedContainers, containerInfo) } else { key := evictUnit{ uid: containerName.PodUID, name: containerName.ContainerName, } containerInfo.podNameWithNamespace = containerName.PodFullName containerInfo.containerName = containerName.ContainerName evictUnits[key] = append(evictUnits[key], containerInfo) } } // Sort the containers by age. for uid := range evictUnits { sort.Sort(byCreated(evictUnits[uid])) } return evictUnits, unidentifiedContainers, nil }