func inspectContainer(client DockerInterface, dockerID, containerName, tPath string) (*api.ContainerStatus, error) { inspectResult, err := client.InspectContainer(dockerID) if err != nil { return nil, err } if inspectResult == nil { // Why did we not get an error? return &api.ContainerStatus{}, nil } glog.V(4).Infof("Container: %s [%s] inspect result %+v", *inspectResult) containerStatus := api.ContainerStatus{ Image: inspectResult.Config.Image, } waiting := true if inspectResult.State.Running { containerStatus.State.Running = &api.ContainerStateRunning{ StartedAt: inspectResult.State.StartedAt, } if containerName == "net" && inspectResult.NetworkSettings != nil { containerStatus.PodIP = inspectResult.NetworkSettings.IPAddress } waiting = false } else if !inspectResult.State.FinishedAt.IsZero() { // TODO(dchen1107): Integrate with event to provide a better reason containerStatus.State.Termination = &api.ContainerStateTerminated{ ExitCode: inspectResult.State.ExitCode, Reason: "", StartedAt: inspectResult.State.StartedAt, FinishedAt: inspectResult.State.FinishedAt, } if tPath != "" { path, found := inspectResult.Volumes[tPath] if found { data, err := ioutil.ReadFile(path) if err != nil { glog.Errorf("Error on reading termination-log %s: %v", path, err) } else { containerStatus.State.Termination.Message = string(data) } } } waiting = false } if waiting { // TODO(dchen1107): Separate issue docker/docker#8294 was filed // TODO(dchen1107): Need to figure out why we are still waiting // Check any issue to run container containerStatus.State.Waiting = &api.ContainerStateWaiting{ Reason: ErrContainerCannotRun.Error(), } } return &containerStatus, nil }
func inspectContainer(client DockerInterface, dockerID, containerName, tPath string) (*api.ContainerStatus, error) { inspectResult, err := client.InspectContainer(dockerID) if err != nil { return nil, err } if inspectResult == nil { // Why did we not get an error? return &api.ContainerStatus{}, nil } glog.V(3).Infof("Container inspect result: %+v", *inspectResult) containerStatus := api.ContainerStatus{ Image: inspectResult.Config.Image, ContainerID: "docker://" + dockerID, } waiting := true if inspectResult.State.Running { containerStatus.State.Running = &api.ContainerStateRunning{ StartedAt: util.NewTime(inspectResult.State.StartedAt), } if containerName == "net" && inspectResult.NetworkSettings != nil { containerStatus.PodIP = inspectResult.NetworkSettings.IPAddress } waiting = false } else if !inspectResult.State.FinishedAt.IsZero() { reason := "" // Note: An application might handle OOMKilled gracefully. // In that case, the container is oom killed, but the exit // code could be 0. if inspectResult.State.OOMKilled { reason = "OOM Killed" } else { reason = inspectResult.State.Error } containerStatus.State.Termination = &api.ContainerStateTerminated{ ExitCode: inspectResult.State.ExitCode, Reason: reason, StartedAt: util.NewTime(inspectResult.State.StartedAt), FinishedAt: util.NewTime(inspectResult.State.FinishedAt), } if tPath != "" { path, found := inspectResult.Volumes[tPath] if found { data, err := ioutil.ReadFile(path) if err != nil { glog.Errorf("Error on reading termination-log %s: %v", path, err) } else { containerStatus.State.Termination.Message = string(data) } } } waiting = false } if waiting { // TODO(dchen1107): Separate issue docker/docker#8294 was filed // TODO(dchen1107): Need to figure out why we are still waiting // Check any issue to run container containerStatus.State.Waiting = &api.ContainerStateWaiting{ Reason: ErrContainerCannotRun.Error(), } } return &containerStatus, nil }