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