package dockertools
import "k8s.io/kubernetes/pkg/kubelet/dockertools"
Index ¶
- Constants
- Variables
- func BuildDockerName(dockerName KubeletContainerName, container *api.Container) string
- func HashContainer(container *api.Container) uint64
- func NewVersion(input string) (dockerVersion, error)
- func StartPty(c *exec.Cmd) (pty *os.File, err error)
- type ContainerCommandRunner
- type DockerContainers
- func GetKubeletDockerContainers(client DockerInterface, allContainers bool) (DockerContainers, error)
- func (c DockerContainers) FindPodContainer(podFullName string, uid types.UID, containerName string) (*docker.APIContainers, bool, uint64)
- type DockerID
- type DockerInterface
- func ConnectToDockerOrDie(dockerEndpoint string) DockerInterface
- func NewInstrumentedDockerInterface(dockerClient DockerInterface) DockerInterface
- type DockerManager
- func NewDockerManager( client DockerInterface, recorder record.EventRecorder, readinessManager *kubecontainer.ReadinessManager, containerRefManager *kubecontainer.RefManager, podInfraContainerImage string, qps float32, burst int, containerLogsDir string, osInterface kubecontainer.OSInterface) *DockerManager
- func (dm *DockerManager) CreatePodInfraContainer(pod *api.Pod, generator kubecontainer.RunContainerOptionsGenerator, runner kubecontainer.HandlerRunner) (DockerID, error)
- func (dm *DockerManager) ExecInContainer(containerId string, cmd []string, stdin io.Reader, stdout, stderr io.WriteCloser, tty bool) error
- func (dm *DockerManager) GetKubeletDockerContainerLogs(containerID, tail string, follow bool, stdout, stderr io.Writer) (err error)
- func (dm *DockerManager) GetPodInfraContainer(pod kubecontainer.Pod) (kubecontainer.Container, error)
- func (dm *DockerManager) GetPodStatus(pod *api.Pod) (*api.PodStatus, error)
- func (dm *DockerManager) GetPods(all bool) ([]*kubecontainer.Pod, error)
- func (dm *DockerManager) GetRunningContainers(ids []string) ([]*docker.Container, error)
- func (dm *DockerManager) IsImagePresent(image string) (bool, error)
- func (dm *DockerManager) KillContainer(containerID types.UID) error
- func (dm *DockerManager) KillPod(pod kubecontainer.Pod) error
- func (dm *DockerManager) PodInfraContainerChanged(pod *api.Pod, podInfraContainer *kubecontainer.Container) (bool, error)
- func (dm *DockerManager) PortForward(pod *kubecontainer.Pod, port uint16, stream io.ReadWriteCloser) error
- func (dm *DockerManager) Pull(image string) error
- func (dm *DockerManager) RunContainer(pod *api.Pod, container *api.Container, generator kubecontainer.RunContainerOptionsGenerator, runner kubecontainer.HandlerRunner, netMode, ipcMode string) (DockerID, error)
- func (dm *DockerManager) RunInContainer(containerID string, cmd []string) ([]byte, error)
- func (dm *DockerManager) Version() (kubecontainer.Version, error)
- type DockerPuller
- type FakeDockerClient
- func (f *FakeDockerClient) AssertCalls(calls []string) (err error)
- func (f *FakeDockerClient) AssertCreated(created []string) error
- func (f *FakeDockerClient) AssertStopped(stopped []string) error
- func (f *FakeDockerClient) AssertUnorderedCalls(calls []string) (err error)
- func (f *FakeDockerClient) ClearCalls()
- func (f *FakeDockerClient) CreateContainer(c docker.CreateContainerOptions) (*docker.Container, error)
- func (f *FakeDockerClient) CreateExec(_ docker.CreateExecOptions) (*docker.Exec, error)
- func (f *FakeDockerClient) Info() (*docker.Env, error)
- func (f *FakeDockerClient) InspectContainer(id string) (*docker.Container, error)
- func (f *FakeDockerClient) InspectImage(name string) (*docker.Image, error)
- func (f *FakeDockerClient) ListContainers(options docker.ListContainersOptions) ([]docker.APIContainers, error)
- func (f *FakeDockerClient) ListImages(opts docker.ListImagesOptions) ([]docker.APIImages, error)
- func (f *FakeDockerClient) Logs(opts docker.LogsOptions) error
- func (f *FakeDockerClient) PullImage(opts docker.PullImageOptions, auth docker.AuthConfiguration) error
- func (f *FakeDockerClient) RemoveContainer(opts docker.RemoveContainerOptions) error
- func (f *FakeDockerClient) RemoveImage(image string) error
- func (f *FakeDockerClient) StartContainer(id string, hostConfig *docker.HostConfig) error
- func (f *FakeDockerClient) StartExec(_ string, _ docker.StartExecOptions) error
- func (f *FakeDockerClient) StopContainer(id string, timeout uint) error
- func (f *FakeDockerClient) Version() (*docker.Env, error)
- type FakeDockerPuller
- func (f *FakeDockerPuller) IsImagePresent(name string) (bool, error)
- func (f *FakeDockerPuller) Pull(image string) (err error)
- type KubeletContainerName
Constants ¶
const ( PodInfraContainerName = leaky.PodInfraContainerName DockerPrefix = "docker://" PodInfraContainerImage = "gcr.io/google_containers/pause:0.8.0" )
Variables ¶
var ( // ErrNoContainersInPod is returned when there are no containers for a given pod ErrNoContainersInPod = errors.New("no containers exist for this pod") // ErrNoPodInfraContainerInPod is returned when there is no pod infra container for a given pod ErrNoPodInfraContainerInPod = errors.New("No pod infra container exists for this pod") // ErrContainerCannotRun is returned when a container is created, but cannot run properly ErrContainerCannotRun = errors.New("Container cannot run") )
Functions ¶
func BuildDockerName ¶
func BuildDockerName(dockerName KubeletContainerName, container *api.Container) string
Creates a name which can be reversed to identify both full pod name and container name.
func HashContainer ¶
func NewVersion ¶
func StartPty ¶
Types ¶
type ContainerCommandRunner ¶
type ContainerCommandRunner interface { RunInContainer(containerID string, cmd []string) ([]byte, error) ExecInContainer(containerID string, cmd []string, in io.Reader, out, err io.WriteCloser, tty bool) error PortForward(pod *kubecontainer.Pod, port uint16, stream io.ReadWriteCloser) error }
TODO(yifan): Move this to container.Runtime.
type DockerContainers ¶
type DockerContainers map[DockerID]*docker.APIContainers
DockerContainers is a map of containers
func GetKubeletDockerContainers ¶
func GetKubeletDockerContainers(client DockerInterface, allContainers bool) (DockerContainers, error)
GetKubeletDockerContainers lists all container or just the running ones. Returns a map of docker containers that we manage, keyed by container ID. TODO: Move this function with dockerCache to DockerManager.
func (DockerContainers) FindPodContainer ¶
func (c DockerContainers) FindPodContainer(podFullName string, uid types.UID, containerName string) (*docker.APIContainers, bool, uint64)
type DockerID ¶
type DockerID string
DockerID is an ID of docker container. It is a type to make it clear when we're working with docker container Ids
type DockerInterface ¶
type DockerInterface interface { ListContainers(options docker.ListContainersOptions) ([]docker.APIContainers, error) InspectContainer(id string) (*docker.Container, error) CreateContainer(docker.CreateContainerOptions) (*docker.Container, error) StartContainer(id string, hostConfig *docker.HostConfig) error StopContainer(id string, timeout uint) error RemoveContainer(opts docker.RemoveContainerOptions) error InspectImage(image string) (*docker.Image, error) ListImages(opts docker.ListImagesOptions) ([]docker.APIImages, error) PullImage(opts docker.PullImageOptions, auth docker.AuthConfiguration) error RemoveImage(image string) error Logs(opts docker.LogsOptions) error Version() (*docker.Env, error) Info() (*docker.Env, error) CreateExec(docker.CreateExecOptions) (*docker.Exec, error) StartExec(string, docker.StartExecOptions) error }
DockerInterface is an abstract interface for testability. It abstracts the interface of docker.Client.
func ConnectToDockerOrDie ¶
func ConnectToDockerOrDie(dockerEndpoint string) DockerInterface
func NewInstrumentedDockerInterface ¶
func NewInstrumentedDockerInterface(dockerClient DockerInterface) DockerInterface
Creates an instrumented DockerInterface from an existing DockerInterface.
type DockerManager ¶
type DockerManager struct { // TODO(yifan): PodInfraContainerImage can be unexported once // we move createPodInfraContainer into dockertools. PodInfraContainerImage string // TODO(yifan): We export this for testability, so when we have a fake // container manager, then we can unexport this. Also at that time, we // use the concrete type so that we can record the pull failure and eliminate // the image checking in GetPodStatus(). Puller DockerPuller // contains filtered or unexported fields }
TODO: Eventually DockerManager should implement kubecontainer.Runtime interface.
func NewDockerManager ¶
func NewDockerManager( client DockerInterface, recorder record.EventRecorder, readinessManager *kubecontainer.ReadinessManager, containerRefManager *kubecontainer.RefManager, podInfraContainerImage string, qps float32, burst int, containerLogsDir string, osInterface kubecontainer.OSInterface) *DockerManager
func (*DockerManager) CreatePodInfraContainer ¶
func (dm *DockerManager) CreatePodInfraContainer(pod *api.Pod, generator kubecontainer.RunContainerOptionsGenerator, runner kubecontainer.HandlerRunner) (DockerID, error)
CreatePodInfraContainer starts the pod infra container for a pod. Returns the docker container ID of the newly created container.
func (*DockerManager) ExecInContainer ¶
func (dm *DockerManager) ExecInContainer(containerId string, cmd []string, stdin io.Reader, stdout, stderr io.WriteCloser, tty bool) error
ExecInContainer uses nsenter to run the command inside the container identified by containerID.
TODO:
- match cgroups of container
- should we support `docker exec`?
- should we support nsenter in a container, running with elevated privs and --pid=host?
- use strong type for containerId
func (*DockerManager) GetKubeletDockerContainerLogs ¶
func (dm *DockerManager) GetKubeletDockerContainerLogs(containerID, tail string, follow bool, stdout, stderr io.Writer) (err error)
GetKubeletDockerContainerLogs returns logs of a specific container. By default, it returns a snapshot of the container log. Set |follow| to true to stream the log. Set |follow| to false and specify the number of lines (e.g. "100" or "all") to tail the log. TODO: Make 'RawTerminal' option flagable.
func (*DockerManager) GetPodInfraContainer ¶
func (dm *DockerManager) GetPodInfraContainer(pod kubecontainer.Pod) (kubecontainer.Container, error)
func (*DockerManager) GetPodStatus ¶
GetPodStatus returns docker related status for all containers in the pod as well as the infrastructure container.
func (*DockerManager) GetPods ¶
func (dm *DockerManager) GetPods(all bool) ([]*kubecontainer.Pod, error)
func (*DockerManager) GetRunningContainers ¶
func (dm *DockerManager) GetRunningContainers(ids []string) ([]*docker.Container, error)
func (*DockerManager) IsImagePresent ¶
func (dm *DockerManager) IsImagePresent(image string) (bool, error)
func (*DockerManager) KillContainer ¶
func (dm *DockerManager) KillContainer(containerID types.UID) error
KillContainer kills a container identified by containerID. Internally, it invokes docker's StopContainer API with a timeout of 10s. TODO(yifan): Use new ContainerID type.
func (*DockerManager) KillPod ¶
func (dm *DockerManager) KillPod(pod kubecontainer.Pod) error
Kills all containers in the specified pod
func (*DockerManager) PodInfraContainerChanged ¶
func (dm *DockerManager) PodInfraContainerChanged(pod *api.Pod, podInfraContainer *kubecontainer.Container) (bool, error)
PodInfraContainer returns true if the pod infra container has changed.
func (*DockerManager) PortForward ¶
func (dm *DockerManager) PortForward(pod *kubecontainer.Pod, port uint16, stream io.ReadWriteCloser) error
PortForward executes socat in the pod's network namespace and copies data between stream (representing the user's local connection on their computer) and the specified port in the container.
TODO:
- match cgroups of container
- should we support nsenter + socat on the host? (current impl)
- should we support nsenter + socat in a container, running with elevated privs and --pid=host?
func (*DockerManager) Pull ¶
func (dm *DockerManager) Pull(image string) error
func (*DockerManager) RunContainer ¶
func (dm *DockerManager) RunContainer(pod *api.Pod, container *api.Container, generator kubecontainer.RunContainerOptionsGenerator, runner kubecontainer.HandlerRunner, netMode, ipcMode string) (DockerID, error)
Run a single container from a pod. Returns the docker container ID
func (*DockerManager) RunInContainer ¶
func (dm *DockerManager) RunInContainer(containerID string, cmd []string) ([]byte, error)
RunInContainer uses nsinit to run the command inside the container identified by containerID TODO(yifan): Use strong type for containerID.
func (*DockerManager) Version ¶
func (dm *DockerManager) Version() (kubecontainer.Version, error)
type DockerPuller ¶
DockerPuller is an abstract interface for testability. It abstracts image pull operations.
type FakeDockerClient ¶
type FakeDockerClient struct { sync.Mutex ContainerList []docker.APIContainers ExitedContainerList []docker.APIContainers Container *docker.Container ContainerMap map[string]*docker.Container Image *docker.Image Images []docker.APIImages Errors map[string]error Stopped []string Created []string Removed []string RemovedImages util.StringSet VersionInfo docker.Env Information docker.Env // contains filtered or unexported fields }
FakeDockerClient is a simple fake docker client, so that kubelet can be run for testing without requiring a real docker setup.
func (*FakeDockerClient) AssertCalls ¶
func (f *FakeDockerClient) AssertCalls(calls []string) (err error)
func (*FakeDockerClient) AssertCreated ¶
func (f *FakeDockerClient) AssertCreated(created []string) error
func (*FakeDockerClient) AssertStopped ¶
func (f *FakeDockerClient) AssertStopped(stopped []string) error
func (*FakeDockerClient) AssertUnorderedCalls ¶
func (f *FakeDockerClient) AssertUnorderedCalls(calls []string) (err error)
func (*FakeDockerClient) ClearCalls ¶
func (f *FakeDockerClient) ClearCalls()
func (*FakeDockerClient) CreateContainer ¶
func (f *FakeDockerClient) CreateContainer(c docker.CreateContainerOptions) (*docker.Container, error)
CreateContainer is a test-spy implementation of DockerInterface.CreateContainer. It adds an entry "create" to the internal method call record.
func (*FakeDockerClient) CreateExec ¶
func (f *FakeDockerClient) CreateExec(_ docker.CreateExecOptions) (*docker.Exec, error)
func (*FakeDockerClient) Info ¶
func (f *FakeDockerClient) Info() (*docker.Env, error)
func (*FakeDockerClient) InspectContainer ¶
func (f *FakeDockerClient) InspectContainer(id string) (*docker.Container, error)
InspectContainer is a test-spy implementation of DockerInterface.InspectContainer. It adds an entry "inspect" to the internal method call record.
func (*FakeDockerClient) InspectImage ¶
func (f *FakeDockerClient) InspectImage(name string) (*docker.Image, error)
InspectImage is a test-spy implementation of DockerInterface.InspectImage. It adds an entry "inspect" to the internal method call record.
func (*FakeDockerClient) ListContainers ¶
func (f *FakeDockerClient) ListContainers(options docker.ListContainersOptions) ([]docker.APIContainers, error)
ListContainers is a test-spy implementation of DockerInterface.ListContainers. It adds an entry "list" to the internal method call record.
func (*FakeDockerClient) ListImages ¶
func (f *FakeDockerClient) ListImages(opts docker.ListImagesOptions) ([]docker.APIImages, error)
func (*FakeDockerClient) Logs ¶
func (f *FakeDockerClient) Logs(opts docker.LogsOptions) error
Logs is a test-spy implementation of DockerInterface.Logs. It adds an entry "logs" to the internal method call record.
func (*FakeDockerClient) PullImage ¶
func (f *FakeDockerClient) PullImage(opts docker.PullImageOptions, auth docker.AuthConfiguration) error
PullImage is a test-spy implementation of DockerInterface.StopContainer. It adds an entry "pull" to the internal method call record.
func (*FakeDockerClient) RemoveContainer ¶
func (f *FakeDockerClient) RemoveContainer(opts docker.RemoveContainerOptions) error
func (*FakeDockerClient) RemoveImage ¶
func (f *FakeDockerClient) RemoveImage(image string) error
func (*FakeDockerClient) StartContainer ¶
func (f *FakeDockerClient) StartContainer(id string, hostConfig *docker.HostConfig) error
StartContainer is a test-spy implementation of DockerInterface.StartContainer. It adds an entry "start" to the internal method call record.
func (*FakeDockerClient) StartExec ¶
func (f *FakeDockerClient) StartExec(_ string, _ docker.StartExecOptions) error
func (*FakeDockerClient) StopContainer ¶
func (f *FakeDockerClient) StopContainer(id string, timeout uint) error
StopContainer is a test-spy implementation of DockerInterface.StopContainer. It adds an entry "stop" to the internal method call record.
func (*FakeDockerClient) Version ¶
func (f *FakeDockerClient) Version() (*docker.Env, error)
type FakeDockerPuller ¶
type FakeDockerPuller struct { sync.Mutex HasImages []string ImagesPulled []string // Every pull will return the first error here, and then reslice // to remove it. Will give nil errors if this slice is empty. ErrorsToInject []error }
FakeDockerPuller is a stub implementation of DockerPuller.
func (*FakeDockerPuller) IsImagePresent ¶
func (f *FakeDockerPuller) IsImagePresent(name string) (bool, error)
func (*FakeDockerPuller) Pull ¶
func (f *FakeDockerPuller) Pull(image string) (err error)
Pull records the image pull attempt, and optionally injects an error.
type KubeletContainerName ¶
KubeletContainerName encapsulates a pod name and a Kubernetes container name.
func ParseDockerName ¶
func ParseDockerName(name string) (dockerName *KubeletContainerName, hash uint64, err error)
Unpacks a container name, returning the pod full name and container name we would have used to construct the docker name. If we are unable to parse the name, an error is returned.
Source Files ¶
docker.go fake_docker_client.go instrumented_docker.go manager.go pty_unsupported.go
- Version
- v0.16.2
- Published
- May 4, 2015
- Platform
- js/wasm
- Imports
- 30 packages
- Last checked
- 2 seconds ago –
Tools for package owners.