1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /*
- Copyright 2014 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package libdocker
- import (
- "time"
- dockertypes "github.com/docker/docker/api/types"
- dockercontainer "github.com/docker/docker/api/types/container"
- dockerimagetypes "github.com/docker/docker/api/types/image"
- dockerapi "github.com/docker/docker/client"
- "k8s.io/klog"
- )
- const (
- // https://docs.docker.com/engine/reference/api/docker_remote_api/
- // docker version should be at least 1.13.1
- MinimumDockerAPIVersion = "1.26.0"
- // Status of a container returned by ListContainers.
- StatusRunningPrefix = "Up"
- StatusCreatedPrefix = "Created"
- StatusExitedPrefix = "Exited"
- // Fake docker endpoint
- FakeDockerEndpoint = "fake://"
- )
- // Interface is an abstract interface for testability. It abstracts the interface of docker client.
- type Interface interface {
- ListContainers(options dockertypes.ContainerListOptions) ([]dockertypes.Container, error)
- InspectContainer(id string) (*dockertypes.ContainerJSON, error)
- InspectContainerWithSize(id string) (*dockertypes.ContainerJSON, error)
- CreateContainer(dockertypes.ContainerCreateConfig) (*dockercontainer.ContainerCreateCreatedBody, error)
- StartContainer(id string) error
- StopContainer(id string, timeout time.Duration) error
- UpdateContainerResources(id string, updateConfig dockercontainer.UpdateConfig) error
- RemoveContainer(id string, opts dockertypes.ContainerRemoveOptions) error
- InspectImageByRef(imageRef string) (*dockertypes.ImageInspect, error)
- InspectImageByID(imageID string) (*dockertypes.ImageInspect, error)
- ListImages(opts dockertypes.ImageListOptions) ([]dockertypes.ImageSummary, error)
- PullImage(image string, auth dockertypes.AuthConfig, opts dockertypes.ImagePullOptions) error
- RemoveImage(image string, opts dockertypes.ImageRemoveOptions) ([]dockertypes.ImageDeleteResponseItem, error)
- ImageHistory(id string) ([]dockerimagetypes.HistoryResponseItem, error)
- Logs(string, dockertypes.ContainerLogsOptions, StreamOptions) error
- Version() (*dockertypes.Version, error)
- Info() (*dockertypes.Info, error)
- CreateExec(string, dockertypes.ExecConfig) (*dockertypes.IDResponse, error)
- StartExec(string, dockertypes.ExecStartCheck, StreamOptions) error
- InspectExec(id string) (*dockertypes.ContainerExecInspect, error)
- AttachToContainer(string, dockertypes.ContainerAttachOptions, StreamOptions) error
- ResizeContainerTTY(id string, height, width uint) error
- ResizeExecTTY(id string, height, width uint) error
- GetContainerStats(id string) (*dockertypes.StatsJSON, error)
- }
- // Get a *dockerapi.Client, either using the endpoint passed in, or using
- // DOCKER_HOST, DOCKER_TLS_VERIFY, and DOCKER_CERT path per their spec
- func getDockerClient(dockerEndpoint string) (*dockerapi.Client, error) {
- if len(dockerEndpoint) > 0 {
- klog.Infof("Connecting to docker on %s", dockerEndpoint)
- return dockerapi.NewClient(dockerEndpoint, "", nil, nil)
- }
- return dockerapi.NewClientWithOpts(dockerapi.FromEnv)
- }
- // ConnectToDockerOrDie creates docker client connecting to docker daemon.
- // If the endpoint passed in is "fake://", a fake docker client
- // will be returned. The program exits if error occurs. The requestTimeout
- // is the timeout for docker requests. If timeout is exceeded, the request
- // will be cancelled and throw out an error. If requestTimeout is 0, a default
- // value will be applied.
- func ConnectToDockerOrDie(dockerEndpoint string, requestTimeout, imagePullProgressDeadline time.Duration) Interface {
- client, err := getDockerClient(dockerEndpoint)
- if err != nil {
- klog.Fatalf("Couldn't connect to docker: %v", err)
- }
- klog.Infof("Start docker client with request timeout=%v", requestTimeout)
- return newKubeDockerClient(client, requestTimeout, imagePullProgressDeadline)
- }
|