github.com/zhouyu0/docker-note@v0.0.0-20190722021225-b8d3825084db/api/types/types.go (about)

     1  package types // import "github.com/docker/docker/api/types"
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"io"
     7  	"os"
     8  	"strings"
     9  	"time"
    10  
    11  	"github.com/docker/docker/api/types/container"
    12  	"github.com/docker/docker/api/types/filters"
    13  	"github.com/docker/docker/api/types/mount"
    14  	"github.com/docker/docker/api/types/network"
    15  	"github.com/docker/docker/api/types/registry"
    16  	"github.com/docker/docker/api/types/swarm"
    17  	"github.com/docker/go-connections/nat"
    18  )
    19  
    20  // RootFS returns Image's RootFS description including the layer IDs.
    21  type RootFS struct {
    22  	Type      string
    23  	Layers    []string `json:",omitempty"`
    24  	BaseLayer string   `json:",omitempty"`
    25  }
    26  
    27  // ImageInspect contains response of Engine API:
    28  // GET "/images/{name:.*}/json"
    29  type ImageInspect struct {
    30  	ID              string `json:"Id"`
    31  	RepoTags        []string
    32  	RepoDigests     []string
    33  	Parent          string
    34  	Comment         string
    35  	Created         string
    36  	Container       string
    37  	ContainerConfig *container.Config
    38  	DockerVersion   string
    39  	Author          string
    40  	Config          *container.Config
    41  	Architecture    string
    42  	Os              string
    43  	OsVersion       string `json:",omitempty"`
    44  	Size            int64
    45  	VirtualSize     int64
    46  	GraphDriver     GraphDriverData
    47  	RootFS          RootFS
    48  	Metadata        ImageMetadata
    49  }
    50  
    51  // ImageMetadata contains engine-local data about the image
    52  type ImageMetadata struct {
    53  	LastTagTime time.Time `json:",omitempty"`
    54  }
    55  
    56  // Container contains response of Engine API:
    57  // GET "/containers/json"
    58  type Container struct {
    59  	ID         string `json:"Id"`
    60  	Names      []string
    61  	Image      string
    62  	ImageID    string
    63  	Command    string
    64  	Created    int64
    65  	Ports      []Port
    66  	SizeRw     int64 `json:",omitempty"`
    67  	SizeRootFs int64 `json:",omitempty"`
    68  	Labels     map[string]string
    69  	State      string
    70  	Status     string
    71  	HostConfig struct {
    72  		NetworkMode string `json:",omitempty"`
    73  	}
    74  	NetworkSettings *SummaryNetworkSettings
    75  	Mounts          []MountPoint
    76  }
    77  
    78  // CopyConfig contains request body of Engine API:
    79  // POST "/containers/"+containerID+"/copy"
    80  type CopyConfig struct {
    81  	Resource string
    82  }
    83  
    84  // ContainerPathStat is used to encode the header from
    85  // GET "/containers/{name:.*}/archive"
    86  // "Name" is the file or directory name.
    87  type ContainerPathStat struct {
    88  	Name       string      `json:"name"`
    89  	Size       int64       `json:"size"`
    90  	Mode       os.FileMode `json:"mode"`
    91  	Mtime      time.Time   `json:"mtime"`
    92  	LinkTarget string      `json:"linkTarget"`
    93  }
    94  
    95  // ContainerStats contains response of Engine API:
    96  // GET "/stats"
    97  type ContainerStats struct {
    98  	Body   io.ReadCloser `json:"body"`
    99  	OSType string        `json:"ostype"`
   100  }
   101  
   102  // Ping contains response of Engine API:
   103  // GET "/_ping"
   104  type Ping struct {
   105  	APIVersion     string
   106  	OSType         string
   107  	Experimental   bool
   108  	BuilderVersion BuilderVersion
   109  }
   110  
   111  // ComponentVersion describes the version information for a specific component.
   112  type ComponentVersion struct {
   113  	Name    string
   114  	Version string
   115  	Details map[string]string `json:",omitempty"`
   116  }
   117  
   118  // Version contains response of Engine API:
   119  // GET "/version"
   120  type Version struct {
   121  	Platform   struct{ Name string } `json:",omitempty"`
   122  	Components []ComponentVersion    `json:",omitempty"`
   123  
   124  	// The following fields are deprecated, they relate to the Engine component and are kept for backwards compatibility
   125  
   126  	Version       string
   127  	APIVersion    string `json:"ApiVersion"`
   128  	MinAPIVersion string `json:"MinAPIVersion,omitempty"`
   129  	GitCommit     string
   130  	GoVersion     string
   131  	Os            string
   132  	Arch          string
   133  	KernelVersion string `json:",omitempty"`
   134  	Experimental  bool   `json:",omitempty"`
   135  	BuildTime     string `json:",omitempty"`
   136  }
   137  
   138  // Commit holds the Git-commit (SHA1) that a binary was built from, as reported
   139  // in the version-string of external tools, such as containerd, or runC.
   140  type Commit struct {
   141  	ID       string // ID is the actual commit ID of external tool.
   142  	Expected string // Expected is the commit ID of external tool expected by dockerd as set at build time.
   143  }
   144  
   145  // Info contains response of Engine API:
   146  // GET "/info"
   147  type Info struct {
   148  	ID                 string
   149  	Containers         int
   150  	ContainersRunning  int
   151  	ContainersPaused   int
   152  	ContainersStopped  int
   153  	Images             int
   154  	Driver             string
   155  	DriverStatus       [][2]string
   156  	SystemStatus       [][2]string
   157  	Plugins            PluginsInfo
   158  	MemoryLimit        bool
   159  	SwapLimit          bool
   160  	KernelMemory       bool
   161  	CPUCfsPeriod       bool `json:"CpuCfsPeriod"`
   162  	CPUCfsQuota        bool `json:"CpuCfsQuota"`
   163  	CPUShares          bool
   164  	CPUSet             bool
   165  	IPv4Forwarding     bool
   166  	BridgeNfIptables   bool
   167  	BridgeNfIP6tables  bool `json:"BridgeNfIp6tables"`
   168  	Debug              bool
   169  	NFd                int
   170  	OomKillDisable     bool
   171  	NGoroutines        int
   172  	SystemTime         string
   173  	LoggingDriver      string
   174  	CgroupDriver       string
   175  	NEventsListener    int
   176  	KernelVersion      string
   177  	OperatingSystem    string
   178  	OSType             string
   179  	Architecture       string
   180  	IndexServerAddress string
   181  	RegistryConfig     *registry.ServiceConfig
   182  	NCPU               int
   183  	MemTotal           int64
   184  	GenericResources   []swarm.GenericResource
   185  	DockerRootDir      string
   186  	HTTPProxy          string `json:"HttpProxy"`
   187  	HTTPSProxy         string `json:"HttpsProxy"`
   188  	NoProxy            string
   189  	Name               string
   190  	Labels             []string
   191  	ExperimentalBuild  bool
   192  	ServerVersion      string
   193  	ClusterStore       string
   194  	ClusterAdvertise   string
   195  	Runtimes           map[string]Runtime
   196  	DefaultRuntime     string
   197  	Swarm              swarm.Info
   198  	// LiveRestoreEnabled determines whether containers should be kept
   199  	// running when the daemon is shutdown or upon daemon start if
   200  	// running containers are detected
   201  	LiveRestoreEnabled bool
   202  	Isolation          container.Isolation
   203  	InitBinary         string
   204  	ContainerdCommit   Commit
   205  	RuncCommit         Commit
   206  	InitCommit         Commit
   207  	SecurityOptions    []string
   208  	ProductLicense     string `json:",omitempty"`
   209  	Warnings           []string
   210  }
   211  
   212  // KeyValue holds a key/value pair
   213  type KeyValue struct {
   214  	Key, Value string
   215  }
   216  
   217  // SecurityOpt contains the name and options of a security option
   218  type SecurityOpt struct {
   219  	Name    string
   220  	Options []KeyValue
   221  }
   222  
   223  // DecodeSecurityOptions decodes a security options string slice to a type safe
   224  // SecurityOpt
   225  func DecodeSecurityOptions(opts []string) ([]SecurityOpt, error) {
   226  	so := []SecurityOpt{}
   227  	for _, opt := range opts {
   228  		// support output from a < 1.13 docker daemon
   229  		if !strings.Contains(opt, "=") {
   230  			so = append(so, SecurityOpt{Name: opt})
   231  			continue
   232  		}
   233  		secopt := SecurityOpt{}
   234  		split := strings.Split(opt, ",")
   235  		for _, s := range split {
   236  			kv := strings.SplitN(s, "=", 2)
   237  			if len(kv) != 2 {
   238  				return nil, fmt.Errorf("invalid security option %q", s)
   239  			}
   240  			if kv[0] == "" || kv[1] == "" {
   241  				return nil, errors.New("invalid empty security option")
   242  			}
   243  			if kv[0] == "name" {
   244  				secopt.Name = kv[1]
   245  				continue
   246  			}
   247  			secopt.Options = append(secopt.Options, KeyValue{Key: kv[0], Value: kv[1]})
   248  		}
   249  		so = append(so, secopt)
   250  	}
   251  	return so, nil
   252  }
   253  
   254  // PluginsInfo is a temp struct holding Plugins name
   255  // registered with docker daemon. It is used by Info struct
   256  type PluginsInfo struct {
   257  	// List of Volume plugins registered
   258  	Volume []string
   259  	// List of Network plugins registered
   260  	Network []string
   261  	// List of Authorization plugins registered
   262  	Authorization []string
   263  	// List of Log plugins registered
   264  	Log []string
   265  }
   266  
   267  // ExecStartCheck is a temp struct used by execStart
   268  // Config fields is part of ExecConfig in runconfig package
   269  type ExecStartCheck struct {
   270  	// ExecStart will first check if it's detached
   271  	Detach bool
   272  	// Check if there's a tty
   273  	Tty bool
   274  }
   275  
   276  // HealthcheckResult stores information about a single run of a healthcheck probe
   277  type HealthcheckResult struct {
   278  	Start    time.Time // Start is the time this check started
   279  	End      time.Time // End is the time this check ended
   280  	ExitCode int       // ExitCode meanings: 0=healthy, 1=unhealthy, 2=reserved (considered unhealthy), else=error running probe
   281  	Output   string    // Output from last check
   282  }
   283  
   284  // Health states
   285  const (
   286  	NoHealthcheck = "none"      // Indicates there is no healthcheck
   287  	Starting      = "starting"  // Starting indicates that the container is not yet ready
   288  	Healthy       = "healthy"   // Healthy indicates that the container is running correctly
   289  	Unhealthy     = "unhealthy" // Unhealthy indicates that the container has a problem
   290  )
   291  
   292  // Health stores information about the container's healthcheck results
   293  type Health struct {
   294  	Status        string               // Status is one of Starting, Healthy or Unhealthy
   295  	FailingStreak int                  // FailingStreak is the number of consecutive failures
   296  	Log           []*HealthcheckResult // Log contains the last few results (oldest first)
   297  }
   298  
   299  // ContainerState stores container's running state
   300  // it's part of ContainerJSONBase and will return by "inspect" command
   301  type ContainerState struct {
   302  	Status     string // String representation of the container state. Can be one of "created", "running", "paused", "restarting", "removing", "exited", or "dead"
   303  	Running    bool
   304  	Paused     bool
   305  	Restarting bool
   306  	OOMKilled  bool
   307  	Dead       bool
   308  	Pid        int
   309  	ExitCode   int
   310  	Error      string
   311  	StartedAt  string
   312  	FinishedAt string
   313  	Health     *Health `json:",omitempty"`
   314  }
   315  
   316  // ContainerNode stores information about the node that a container
   317  // is running on.  It's only available in Docker Swarm
   318  type ContainerNode struct {
   319  	ID        string
   320  	IPAddress string `json:"IP"`
   321  	Addr      string
   322  	Name      string
   323  	Cpus      int
   324  	Memory    int64
   325  	Labels    map[string]string
   326  }
   327  
   328  // ContainerJSONBase contains response of Engine API:
   329  // GET "/containers/{name:.*}/json"
   330  type ContainerJSONBase struct {
   331  	ID              string `json:"Id"`
   332  	Created         string
   333  	Path            string
   334  	Args            []string
   335  	State           *ContainerState
   336  	Image           string
   337  	ResolvConfPath  string
   338  	HostnamePath    string
   339  	HostsPath       string
   340  	LogPath         string
   341  	Node            *ContainerNode `json:",omitempty"`
   342  	Name            string
   343  	RestartCount    int
   344  	Driver          string
   345  	Platform        string
   346  	MountLabel      string
   347  	ProcessLabel    string
   348  	AppArmorProfile string
   349  	ExecIDs         []string
   350  	HostConfig      *container.HostConfig
   351  	GraphDriver     GraphDriverData
   352  	SizeRw          *int64 `json:",omitempty"`
   353  	SizeRootFs      *int64 `json:",omitempty"`
   354  }
   355  
   356  // ContainerJSON is newly used struct along with MountPoint
   357  type ContainerJSON struct {
   358  	*ContainerJSONBase
   359  	Mounts          []MountPoint
   360  	Config          *container.Config
   361  	NetworkSettings *NetworkSettings
   362  }
   363  
   364  // NetworkSettings exposes the network settings in the api
   365  type NetworkSettings struct {
   366  	NetworkSettingsBase
   367  	DefaultNetworkSettings
   368  	Networks map[string]*network.EndpointSettings
   369  }
   370  
   371  // SummaryNetworkSettings provides a summary of container's networks
   372  // in /containers/json
   373  type SummaryNetworkSettings struct {
   374  	Networks map[string]*network.EndpointSettings
   375  }
   376  
   377  // NetworkSettingsBase holds basic information about networks
   378  type NetworkSettingsBase struct {
   379  	Bridge                 string      // Bridge is the Bridge name the network uses(e.g. `docker0`)
   380  	SandboxID              string      // SandboxID uniquely represents a container's network stack
   381  	HairpinMode            bool        // HairpinMode specifies if hairpin NAT should be enabled on the virtual interface
   382  	LinkLocalIPv6Address   string      // LinkLocalIPv6Address is an IPv6 unicast address using the link-local prefix
   383  	LinkLocalIPv6PrefixLen int         // LinkLocalIPv6PrefixLen is the prefix length of an IPv6 unicast address
   384  	Ports                  nat.PortMap // Ports is a collection of PortBinding indexed by Port
   385  	SandboxKey             string      // SandboxKey identifies the sandbox
   386  	SecondaryIPAddresses   []network.Address
   387  	SecondaryIPv6Addresses []network.Address
   388  }
   389  
   390  // DefaultNetworkSettings holds network information
   391  // during the 2 release deprecation period.
   392  // It will be removed in Docker 1.11.
   393  type DefaultNetworkSettings struct {
   394  	EndpointID          string // EndpointID uniquely represents a service endpoint in a Sandbox
   395  	Gateway             string // Gateway holds the gateway address for the network
   396  	GlobalIPv6Address   string // GlobalIPv6Address holds network's global IPv6 address
   397  	GlobalIPv6PrefixLen int    // GlobalIPv6PrefixLen represents mask length of network's global IPv6 address
   398  	IPAddress           string // IPAddress holds the IPv4 address for the network
   399  	IPPrefixLen         int    // IPPrefixLen represents mask length of network's IPv4 address
   400  	IPv6Gateway         string // IPv6Gateway holds gateway address specific for IPv6
   401  	MacAddress          string // MacAddress holds the MAC address for the network
   402  }
   403  
   404  // MountPoint represents a mount point configuration inside the container.
   405  // This is used for reporting the mountpoints in use by a container.
   406  type MountPoint struct {
   407  	Type        mount.Type `json:",omitempty"`
   408  	Name        string     `json:",omitempty"`
   409  	Source      string
   410  	Destination string
   411  	Driver      string `json:",omitempty"`
   412  	Mode        string
   413  	RW          bool
   414  	Propagation mount.Propagation
   415  }
   416  
   417  // NetworkResource is the body of the "get network" http response message
   418  type NetworkResource struct {
   419  	Name       string                         // Name is the requested name of the network
   420  	ID         string                         `json:"Id"` // ID uniquely identifies a network on a single machine
   421  	Created    time.Time                      // Created is the time the network created
   422  	Scope      string                         // Scope describes the level at which the network exists (e.g. `swarm` for cluster-wide or `local` for machine level)
   423  	Driver     string                         // Driver is the Driver name used to create the network (e.g. `bridge`, `overlay`)
   424  	EnableIPv6 bool                           // EnableIPv6 represents whether to enable IPv6
   425  	IPAM       network.IPAM                   // IPAM is the network's IP Address Management
   426  	Internal   bool                           // Internal represents if the network is used internal only
   427  	Attachable bool                           // Attachable represents if the global scope is manually attachable by regular containers from workers in swarm mode.
   428  	Ingress    bool                           // Ingress indicates the network is providing the routing-mesh for the swarm cluster.
   429  	ConfigFrom network.ConfigReference        // ConfigFrom specifies the source which will provide the configuration for this network.
   430  	ConfigOnly bool                           // ConfigOnly networks are place-holder networks for network configurations to be used by other networks. ConfigOnly networks cannot be used directly to run containers or services.
   431  	Containers map[string]EndpointResource    // Containers contains endpoints belonging to the network
   432  	Options    map[string]string              // Options holds the network specific options to use for when creating the network
   433  	Labels     map[string]string              // Labels holds metadata specific to the network being created
   434  	Peers      []network.PeerInfo             `json:",omitempty"` // List of peer nodes for an overlay network
   435  	Services   map[string]network.ServiceInfo `json:",omitempty"`
   436  }
   437  
   438  // EndpointResource contains network resources allocated and used for a container in a network
   439  type EndpointResource struct {
   440  	Name        string
   441  	EndpointID  string
   442  	MacAddress  string
   443  	IPv4Address string
   444  	IPv6Address string
   445  }
   446  
   447  // NetworkCreate is the expected body of the "create network" http request message
   448  type NetworkCreate struct {
   449  	// Check for networks with duplicate names.
   450  	// Network is primarily keyed based on a random ID and not on the name.
   451  	// Network name is strictly a user-friendly alias to the network
   452  	// which is uniquely identified using ID.
   453  	// And there is no guaranteed way to check for duplicates.
   454  	// Option CheckDuplicate is there to provide a best effort checking of any networks
   455  	// which has the same name but it is not guaranteed to catch all name collisions.
   456  	CheckDuplicate bool
   457  	Driver         string
   458  	Scope          string
   459  	EnableIPv6     bool
   460  	IPAM           *network.IPAM
   461  	Internal       bool
   462  	Attachable     bool
   463  	Ingress        bool
   464  	ConfigOnly     bool
   465  	ConfigFrom     *network.ConfigReference
   466  	Options        map[string]string
   467  	Labels         map[string]string
   468  }
   469  
   470  // NetworkCreateRequest is the request message sent to the server for network create call.
   471  type NetworkCreateRequest struct {
   472  	NetworkCreate
   473  	Name string
   474  }
   475  
   476  // NetworkCreateResponse is the response message sent by the server for network create call
   477  type NetworkCreateResponse struct {
   478  	ID      string `json:"Id"`
   479  	Warning string
   480  }
   481  
   482  // NetworkConnect represents the data to be used to connect a container to the network
   483  type NetworkConnect struct {
   484  	Container      string
   485  	EndpointConfig *network.EndpointSettings `json:",omitempty"`
   486  }
   487  
   488  // NetworkDisconnect represents the data to be used to disconnect a container from the network
   489  type NetworkDisconnect struct {
   490  	Container string
   491  	Force     bool
   492  }
   493  
   494  // NetworkInspectOptions holds parameters to inspect network
   495  type NetworkInspectOptions struct {
   496  	Scope   string
   497  	Verbose bool
   498  }
   499  
   500  // Checkpoint represents the details of a checkpoint
   501  type Checkpoint struct {
   502  	Name string // Name is the name of the checkpoint
   503  }
   504  
   505  // Runtime describes an OCI runtime
   506  type Runtime struct {
   507  	Path string   `json:"path"`
   508  	Args []string `json:"runtimeArgs,omitempty"`
   509  }
   510  
   511  // DiskUsage contains response of Engine API:
   512  // GET "/system/df"
   513  type DiskUsage struct {
   514  	LayersSize  int64
   515  	Images      []*ImageSummary
   516  	Containers  []*Container
   517  	Volumes     []*Volume
   518  	BuildCache  []*BuildCache
   519  	BuilderSize int64 // deprecated
   520  }
   521  
   522  // ContainersPruneReport contains the response for Engine API:
   523  // POST "/containers/prune"
   524  type ContainersPruneReport struct {
   525  	ContainersDeleted []string
   526  	SpaceReclaimed    uint64
   527  }
   528  
   529  // VolumesPruneReport contains the response for Engine API:
   530  // POST "/volumes/prune"
   531  type VolumesPruneReport struct {
   532  	VolumesDeleted []string
   533  	SpaceReclaimed uint64
   534  }
   535  
   536  // ImagesPruneReport contains the response for Engine API:
   537  // POST "/images/prune"
   538  type ImagesPruneReport struct {
   539  	ImagesDeleted  []ImageDeleteResponseItem
   540  	SpaceReclaimed uint64
   541  }
   542  
   543  // BuildCachePruneReport contains the response for Engine API:
   544  // POST "/build/prune"
   545  type BuildCachePruneReport struct {
   546  	CachesDeleted  []string
   547  	SpaceReclaimed uint64
   548  }
   549  
   550  // NetworksPruneReport contains the response for Engine API:
   551  // POST "/networks/prune"
   552  type NetworksPruneReport struct {
   553  	NetworksDeleted []string
   554  }
   555  
   556  // SecretCreateResponse contains the information returned to a client
   557  // on the creation of a new secret.
   558  type SecretCreateResponse struct {
   559  	// ID is the id of the created secret.
   560  	ID string
   561  }
   562  
   563  // SecretListOptions holds parameters to list secrets
   564  type SecretListOptions struct {
   565  	Filters filters.Args
   566  }
   567  
   568  // ConfigCreateResponse contains the information returned to a client
   569  // on the creation of a new config.
   570  type ConfigCreateResponse struct {
   571  	// ID is the id of the created config.
   572  	ID string
   573  }
   574  
   575  // ConfigListOptions holds parameters to list configs
   576  type ConfigListOptions struct {
   577  	Filters filters.Args
   578  }
   579  
   580  // PushResult contains the tag, manifest digest, and manifest size from the
   581  // push. It's used to signal this information to the trust code in the client
   582  // so it can sign the manifest if necessary.
   583  type PushResult struct {
   584  	Tag    string
   585  	Digest string
   586  	Size   int
   587  }
   588  
   589  // BuildResult contains the image id of a successful build
   590  type BuildResult struct {
   591  	ID string
   592  }
   593  
   594  // BuildCache contains information about a build cache record
   595  type BuildCache struct {
   596  	ID          string
   597  	Parent      string
   598  	Type        string
   599  	Description string
   600  	InUse       bool
   601  	Shared      bool
   602  	Size        int64
   603  	CreatedAt   time.Time
   604  	LastUsedAt  *time.Time
   605  	UsageCount  int
   606  }
   607  
   608  // BuildCachePruneOptions hold parameters to prune the build cache
   609  type BuildCachePruneOptions struct {
   610  	All         bool
   611  	KeepStorage int64
   612  	Filters     filters.Args
   613  }