Bump docker/docker to 079ed017b61eb819b8184b90013ce89465d3aaba

- Add API support for SCTP port mapping
- Add canonical import path
- Add `REMOVE` and `ORPHANED` to TaskState
- Fix TLS from environment variables in client
- Introduce NewClientWithOpts func to build custom client easily
- Wrap response errors for container copy methodsto fix error detection using
  `IsErrNotFound` and `IsErrNotImplemented` for `ContainerStatPath`,
  `CopyFromContainer`, and `CopyToContainer` methods.
- Produce errors when empty ids are passed into inspect calls

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn 2018-02-20 17:17:49 +01:00
parent 7d41d18b43
commit aaa7a7cb95
No known key found for this signature in database
GPG Key ID: 76698F39D527CE8C
308 changed files with 539 additions and 419 deletions

View File

@ -5,7 +5,7 @@ github.com/coreos/etcd v3.2.1
github.com/cpuguy83/go-md2man v1.0.8
github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76
github.com/docker/distribution edc3ab29cdff8694dd6feb85cfeb4b5f1b38ed9c
github.com/docker/docker e11bf870a3170a1d2b1e177a0d7ccc66200bd643
github.com/docker/docker 079ed017b61eb819b8184b90013ce89465d3aaba
github.com/docker/docker-credential-helpers 3c90bd29a46b943b2a9842987b58fb91a7c1819b
# the docker/go package contains a customized version of canonical/json
# and is used by Notary. The package is periodically rebased on current Go versions.

View File

@ -1,4 +1,4 @@
package api
package api // import "github.com/docker/docker/api"
// Common constants for daemon and client.
const (

View File

@ -1,6 +1,6 @@
// +build !windows
package api
package api // import "github.com/docker/docker/api"
// MinVersion represents Minimum REST API version supported
const MinVersion string = "1.12"

View File

@ -1,4 +1,4 @@
package api
package api // import "github.com/docker/docker/api"
// MinVersion represents Minimum REST API version supported
// Technically the first daemon API version released on Windows is v1.25 in

View File

@ -1,4 +1,4 @@
package types
package types // import "github.com/docker/docker/api/types"
// AuthConfig contains authorization information for connecting to a Registry
type AuthConfig struct {

View File

@ -1,4 +1,4 @@
package blkiodev
package blkiodev // import "github.com/docker/docker/api/types/blkiodev"
import "fmt"

View File

@ -1,4 +1,4 @@
package types
package types // import "github.com/docker/docker/api/types"
import (
"bufio"

View File

@ -1,4 +1,4 @@
package types
package types // import "github.com/docker/docker/api/types"
import (
"github.com/docker/docker/api/types/container"
@ -25,19 +25,6 @@ type ContainerRmConfig struct {
ForceRemove, RemoveVolume, RemoveLink bool
}
// ContainerCommitConfig contains build configs for commit operation,
// and is used when making a commit with the current state of the container.
type ContainerCommitConfig struct {
Pause bool
Repo string
Tag string
Author string
Comment string
// merge container config into commit config before commit
MergeConfigs bool
Config *container.Config
}
// ExecConfig is a small subset of the Config struct that holds the configuration
// for the exec feature of docker.
type ExecConfig struct {

View File

@ -1,4 +1,4 @@
package container
package container // import "github.com/docker/docker/api/types/container"
import (
"time"

View File

@ -1,4 +1,4 @@
package container
package container // import "github.com/docker/docker/api/types/container"
import (
"strings"

View File

@ -1,6 +1,6 @@
// +build !windows
package container
package container // import "github.com/docker/docker/api/types/container"
// IsValid indicates if an isolation technology is valid
func (i Isolation) IsValid() bool {

View File

@ -1,4 +1,4 @@
package container
package container // import "github.com/docker/docker/api/types/container"
// IsBridge indicates whether container uses the bridge network stack
// in windows it is given the name NAT

View File

@ -1,4 +1,4 @@
package container
package container // import "github.com/docker/docker/api/types/container"
// WaitCondition is a type used to specify a container state for which
// to wait.

View File

@ -1,4 +1,4 @@
package events
package events // import "github.com/docker/docker/api/types/events"
const (
// ContainerEventType is the event type that containers generate

View File

@ -1,7 +1,7 @@
/*Package filters provides tools for encoding a mapping of keys to a set of
multiple values.
*/
package filters
package filters // import "github.com/docker/docker/api/types/filters"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package mount
package mount // import "github.com/docker/docker/api/types/mount"
import (
"os"

View File

@ -1,4 +1,4 @@
package network
package network // import "github.com/docker/docker/api/types/network"
// Address represents an IP address
type Address struct {

View File

@ -1,4 +1,4 @@
package types
package types // import "github.com/docker/docker/api/types"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package registry
package registry // import "github.com/docker/docker/api/types/registry"
// ----------------------------------------------------------------------------
// DO NOT EDIT THIS FILE

View File

@ -1,4 +1,4 @@
package registry
package registry // import "github.com/docker/docker/api/types/registry"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package types
package types // import "github.com/docker/docker/api/types"
// Seccomp represents the config for a seccomp profile for syscall restriction.
type Seccomp struct {

View File

@ -1,6 +1,6 @@
// Package types is used for API stability in the types and response to the
// consumers of the API stats endpoint.
package types
package types // import "github.com/docker/docker/api/types"
import "time"

View File

@ -1,4 +1,4 @@
package strslice
package strslice // import "github.com/docker/docker/api/types/strslice"
import "encoding/json"

View File

@ -1,4 +1,4 @@
package swarm
package swarm // import "github.com/docker/docker/api/types/swarm"
import "time"

View File

@ -1,4 +1,4 @@
package swarm
package swarm // import "github.com/docker/docker/api/types/swarm"
import "os"

View File

@ -1,4 +1,4 @@
package swarm
package swarm // import "github.com/docker/docker/api/types/swarm"
import (
"time"

View File

@ -1,4 +1,4 @@
package swarm
package swarm // import "github.com/docker/docker/api/types/swarm"
import (
"github.com/docker/docker/api/types/network"
@ -62,6 +62,8 @@ const (
PortConfigProtocolTCP PortConfigProtocol = "tcp"
// PortConfigProtocolUDP UDP
PortConfigProtocolUDP PortConfigProtocol = "udp"
// PortConfigProtocolSCTP SCTP
PortConfigProtocolSCTP PortConfigProtocol = "sctp"
)
// EndpointVirtualIP represents the virtual ip of a port.

View File

@ -1,4 +1,4 @@
package swarm
package swarm // import "github.com/docker/docker/api/types/swarm"
// Node represents a node.
type Node struct {

View File

@ -1,4 +1,4 @@
package swarm
package swarm // import "github.com/docker/docker/api/types/swarm"
// RuntimeType is the type of runtime used for the TaskSpec
type RuntimeType string

View File

@ -1,3 +1,3 @@
//go:generate protoc -I . --gogofast_out=import_path=github.com/docker/docker/api/types/swarm/runtime:. plugin.proto
package runtime
package runtime // import "github.com/docker/docker/api/types/swarm/runtime"

View File

@ -1,4 +1,4 @@
package swarm
package swarm // import "github.com/docker/docker/api/types/swarm"
import "os"

View File

@ -1,4 +1,4 @@
package swarm
package swarm // import "github.com/docker/docker/api/types/swarm"
import "time"

View File

@ -1,4 +1,4 @@
package swarm
package swarm // import "github.com/docker/docker/api/types/swarm"
import "time"

View File

@ -1,4 +1,4 @@
package swarm
package swarm // import "github.com/docker/docker/api/types/swarm"
import (
"time"
@ -36,6 +36,10 @@ const (
TaskStateFailed TaskState = "failed"
// TaskStateRejected REJECTED
TaskStateRejected TaskState = "rejected"
// TaskStateRemove REMOVE
TaskStateRemove TaskState = "remove"
// TaskStateOrphaned ORPHANED
TaskStateOrphaned TaskState = "orphaned"
)
// Task represents a task.
@ -162,19 +166,19 @@ const (
// TaskStatus represents the status of a task.
type TaskStatus struct {
Timestamp time.Time `json:",omitempty"`
State TaskState `json:",omitempty"`
Message string `json:",omitempty"`
Err string `json:",omitempty"`
ContainerStatus ContainerStatus `json:",omitempty"`
PortStatus PortStatus `json:",omitempty"`
Timestamp time.Time `json:",omitempty"`
State TaskState `json:",omitempty"`
Message string `json:",omitempty"`
Err string `json:",omitempty"`
ContainerStatus *ContainerStatus `json:",omitempty"`
PortStatus PortStatus `json:",omitempty"`
}
// ContainerStatus represents the status of a container.
type ContainerStatus struct {
ContainerID string `json:",omitempty"`
PID int `json:",omitempty"`
ExitCode int `json:",omitempty"`
ContainerID string
PID int
ExitCode int
}
// PortStatus represents the port status of a task's host ports whose

View File

@ -1,4 +1,4 @@
package time
package time // import "github.com/docker/docker/api/types/time"
import (
"strconv"

View File

@ -1,4 +1,4 @@
package time
package time // import "github.com/docker/docker/api/types/time"
import (
"fmt"

View File

@ -1,4 +1,4 @@
package types
package types // import "github.com/docker/docker/api/types"
import (
"errors"

View File

@ -1,4 +1,4 @@
package versions
package versions // import "github.com/docker/docker/api/types/versions"
import (
"strconv"

View File

@ -1,4 +1,4 @@
package volume
package volume // import "github.com/docker/docker/api/types/volume"
// ----------------------------------------------------------------------------
// DO NOT EDIT THIS FILE

View File

@ -1,4 +1,4 @@
package volume
package volume // import "github.com/docker/docker/api/types/volume"
// ----------------------------------------------------------------------------
// DO NOT EDIT THIS FILE

View File

@ -1,4 +1,4 @@
package dockerignore
package dockerignore // import "github.com/docker/docker/builder/dockerignore"
import (
"bufio"

View File

@ -1,4 +1,4 @@
package git
package git // import "github.com/docker/docker/builder/remotecontext/git"
import (
"io/ioutil"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"github.com/docker/docker/api/types"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"net/url"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -39,7 +39,7 @@ For example, to list running containers (the equivalent of "docker ps"):
}
*/
package client
package client // import "github.com/docker/docker/client"
import (
"errors"
@ -107,8 +107,14 @@ func CheckRedirect(req *http.Request, via []*http.Request) error {
// Use DOCKER_API_VERSION to set the version of the API to reach, leave empty for latest.
// Use DOCKER_CERT_PATH to load the TLS certificates from.
// Use DOCKER_TLS_VERIFY to enable or disable TLS verification, off by default.
// deprecated: use NewClientWithOpts(FromEnv)
func NewEnvClient() (*Client, error) {
var client *http.Client
return NewClientWithOpts(FromEnv)
}
// FromEnv enhance the default client with values from environment variables
func FromEnv(c *Client) error {
var httpClient *http.Client
if dockerCertPath := os.Getenv("DOCKER_CERT_PATH"); dockerCertPath != "" {
options := tlsconfig.Options{
CAFile: filepath.Join(dockerCertPath, "ca.pem"),
@ -118,34 +124,139 @@ func NewEnvClient() (*Client, error) {
}
tlsc, err := tlsconfig.Client(options)
if err != nil {
return nil, err
return err
}
client = &http.Client{
httpClient = &http.Client{
Transport: &http.Transport{
TLSClientConfig: tlsc,
},
CheckRedirect: CheckRedirect,
}
WithHTTPClient(httpClient)(c)
}
host := os.Getenv("DOCKER_HOST")
if host == "" {
host = DefaultDockerHost
if host != "" {
// WithHost will create an API client if it doesn't exist
if err := WithHost(host)(c); err != nil {
return err
}
}
version := os.Getenv("DOCKER_API_VERSION")
if version == "" {
version = api.DefaultVersion
if version != "" {
c.version = version
c.manualOverride = true
}
return nil
}
// WithVersion overrides the client version with the specified one
func WithVersion(version string) func(*Client) error {
return func(c *Client) error {
c.version = version
return nil
}
}
// WithHost overrides the client host with the specified one, creating a new
// http client if one doesn't exist
func WithHost(host string) func(*Client) error {
return func(c *Client) error {
hostURL, err := ParseHostURL(host)
if err != nil {
return err
}
c.host = host
c.proto = hostURL.Scheme
c.addr = hostURL.Host
c.basePath = hostURL.Path
if c.client == nil {
client, err := defaultHTTPClient(host)
if err != nil {
return err
}
return WithHTTPClient(client)(c)
}
if transport, ok := c.client.Transport.(*http.Transport); ok {
return sockets.ConfigureTransport(transport, c.proto, c.addr)
}
return fmt.Errorf("cannot apply host to http transport")
}
}
// WithHTTPClient overrides the client http client with the specified one
func WithHTTPClient(client *http.Client) func(*Client) error {
return func(c *Client) error {
if client != nil {
c.client = client
}
return nil
}
}
// WithHTTPHeaders overrides the client default http headers
func WithHTTPHeaders(headers map[string]string) func(*Client) error {
return func(c *Client) error {
c.customHTTPHeaders = headers
return nil
}
}
// NewClientWithOpts initializes a new API client with default values. It takes functors
// to modify values when creating it, like `NewClientWithOpts(WithVersion(…))`
// It also initializes the custom http headers to add to each request.
//
// It won't send any version information if the version number is empty. It is
// highly recommended that you set a version or your client may break if the
// server is upgraded.
func NewClientWithOpts(ops ...func(*Client) error) (*Client, error) {
client, err := defaultHTTPClient(DefaultDockerHost)
if err != nil {
return nil, err
}
c := &Client{
host: DefaultDockerHost,
version: api.DefaultVersion,
scheme: "http",
client: client,
proto: defaultProto,
addr: defaultAddr,
}
cli, err := NewClient(host, version, client, nil)
for _, op := range ops {
if err := op(c); err != nil {
return nil, err
}
}
if _, ok := c.client.Transport.(http.RoundTripper); !ok {
return nil, fmt.Errorf("unable to verify TLS configuration, invalid transport %v", c.client.Transport)
}
tlsConfig := resolveTLSConfig(c.client.Transport)
if tlsConfig != nil {
// TODO(stevvooe): This isn't really the right way to write clients in Go.
// `NewClient` should probably only take an `*http.Client` and work from there.
// Unfortunately, the model of having a host-ish/url-thingy as the connection
// string has us confusing protocol and transport layers. We continue doing
// this to avoid breaking existing clients but this should be addressed.
c.scheme = "https"
}
return c, nil
}
func defaultHTTPClient(host string) (*http.Client, error) {
url, err := ParseHostURL(host)
if err != nil {
return cli, err
return nil, err
}
if os.Getenv("DOCKER_API_VERSION") != "" {
cli.manualOverride = true
}
return cli, nil
transport := new(http.Transport)
sockets.ConfigureTransport(transport, url.Scheme, url.Host)
return &http.Client{
Transport: transport,
CheckRedirect: CheckRedirect,
}, nil
}
// NewClient initializes a new API client for the given host and API version.
@ -155,47 +266,9 @@ func NewEnvClient() (*Client, error) {
// It won't send any version information if the version number is empty. It is
// highly recommended that you set a version or your client may break if the
// server is upgraded.
// deprecated: use NewClientWithOpts
func NewClient(host string, version string, client *http.Client, httpHeaders map[string]string) (*Client, error) {
hostURL, err := ParseHostURL(host)
if err != nil {
return nil, err
}
if client != nil {
if _, ok := client.Transport.(http.RoundTripper); !ok {
return nil, fmt.Errorf("unable to verify TLS configuration, invalid transport %v", client.Transport)
}
} else {
transport := new(http.Transport)
sockets.ConfigureTransport(transport, hostURL.Scheme, hostURL.Host)
client = &http.Client{
Transport: transport,
CheckRedirect: CheckRedirect,
}
}
scheme := "http"
tlsConfig := resolveTLSConfig(client.Transport)
if tlsConfig != nil {
// TODO(stevvooe): This isn't really the right way to write clients in Go.
// `NewClient` should probably only take an `*http.Client` and work from there.
// Unfortunately, the model of having a host-ish/url-thingy as the connection
// string has us confusing protocol and transport layers. We continue doing
// this to avoid breaking existing clients but this should be addressed.
scheme = "https"
}
// TODO: store URL instead of proto/addr/basePath
return &Client{
scheme: scheme,
host: host,
proto: hostURL.Scheme,
addr: hostURL.Host,
basePath: hostURL.Path,
client: client,
version: version,
customHTTPHeaders: httpHeaders,
}, nil
return NewClientWithOpts(WithHost(host), WithVersion(version), WithHTTPClient(client), WithHTTPHeaders(httpHeaders))
}
// Close the transport used by the client

View File

@ -1,6 +1,9 @@
// +build linux freebsd openbsd darwin
package client
package client // import "github.com/docker/docker/client"
// DefaultDockerHost defines os specific default if DOCKER_HOST is unset
const DefaultDockerHost = "unix:///var/run/docker.sock"
const defaultProto = "unix"
const defaultAddr = "/var/run/docker.sock"

View File

@ -1,4 +1,7 @@
package client
package client // import "github.com/docker/docker/client"
// DefaultDockerHost defines os specific default if DOCKER_HOST is unset
const DefaultDockerHost = "npipe:////./pipe/docker_engine"
const defaultProto = "npipe"
const defaultAddr = "//./pipe/docker_engine"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"bytes"
@ -11,6 +11,9 @@ import (
// ConfigInspectWithRaw returns the config information with raw data
func (cli *Client) ConfigInspectWithRaw(ctx context.Context, id string) (swarm.Config, []byte, error) {
if id == "" {
return swarm.Config{}, nil, objectNotFoundError{object: "config", id: id}
}
if err := cli.NewVersionError("1.30", "config inspect"); err != nil {
return swarm.Config{}, nil, err
}

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import "golang.org/x/net/context"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"net/url"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"net/url"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/base64"
@ -23,7 +23,7 @@ func (cli *Client) ContainerStatPath(ctx context.Context, containerID, path stri
urlStr := "/containers/" + containerID + "/archive"
response, err := cli.head(ctx, urlStr, query, nil)
if err != nil {
return types.ContainerPathStat{}, err
return types.ContainerPathStat{}, wrapResponseError(err, response, "container:path", containerID+":"+path)
}
defer ensureReaderClosed(response)
return getContainerPathStatFromHeader(response.header)
@ -31,9 +31,9 @@ func (cli *Client) ContainerStatPath(ctx context.Context, containerID, path stri
// CopyToContainer copies content into the container filesystem.
// Note that `content` must be a Reader for a TAR archive
func (cli *Client) CopyToContainer(ctx context.Context, container, path string, content io.Reader, options types.CopyToContainerOptions) error {
func (cli *Client) CopyToContainer(ctx context.Context, containerID, dstPath string, content io.Reader, options types.CopyToContainerOptions) error {
query := url.Values{}
query.Set("path", filepath.ToSlash(path)) // Normalize the paths used in the API.
query.Set("path", filepath.ToSlash(dstPath)) // Normalize the paths used in the API.
// Do not allow for an existing directory to be overwritten by a non-directory and vice versa.
if !options.AllowOverwriteDirWithFile {
query.Set("noOverwriteDirNonDir", "true")
@ -43,11 +43,11 @@ func (cli *Client) CopyToContainer(ctx context.Context, container, path string,
query.Set("copyUIDGID", "true")
}
apiPath := "/containers/" + container + "/archive"
apiPath := "/containers/" + containerID + "/archive"
response, err := cli.putRaw(ctx, apiPath, query, content, nil)
if err != nil {
return err
return wrapResponseError(err, response, "container:path", containerID+":"+dstPath)
}
defer ensureReaderClosed(response)
@ -60,14 +60,14 @@ func (cli *Client) CopyToContainer(ctx context.Context, container, path string,
// CopyFromContainer gets the content from the container and returns it as a Reader
// for a TAR archive to manipulate it in the host. It's up to the caller to close the reader.
func (cli *Client) CopyFromContainer(ctx context.Context, container, srcPath string) (io.ReadCloser, types.ContainerPathStat, error) {
func (cli *Client) CopyFromContainer(ctx context.Context, containerID, srcPath string) (io.ReadCloser, types.ContainerPathStat, error) {
query := make(url.Values, 1)
query.Set("path", filepath.ToSlash(srcPath)) // Normalize the paths used in the API.
apiPath := "/containers/" + container + "/archive"
apiPath := "/containers/" + containerID + "/archive"
response, err := cli.get(ctx, apiPath, query, nil)
if err != nil {
return nil, types.ContainerPathStat{}, err
return nil, types.ContainerPathStat{}, wrapResponseError(err, response, "container:path", containerID+":"+srcPath)
}
if response.statusCode != http.StatusOK {

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"io"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"bytes"
@ -12,6 +12,9 @@ import (
// ContainerInspect returns the container information.
func (cli *Client) ContainerInspect(ctx context.Context, containerID string) (types.ContainerJSON, error) {
if containerID == "" {
return types.ContainerJSON{}, objectNotFoundError{object: "container", id: containerID}
}
serverResp, err := cli.get(ctx, "/containers/"+containerID+"/json", nil, nil)
if err != nil {
return types.ContainerJSON{}, wrapResponseError(err, serverResp, "container", containerID)
@ -25,6 +28,9 @@ func (cli *Client) ContainerInspect(ctx context.Context, containerID string) (ty
// ContainerInspectWithRaw returns the container information and its raw representation.
func (cli *Client) ContainerInspectWithRaw(ctx context.Context, containerID string, getSize bool) (types.ContainerJSON, []byte, error) {
if containerID == "" {
return types.ContainerJSON{}, nil, objectNotFoundError{object: "container", id: containerID}
}
query := url.Values{}
if getSize {
query.Set("size", "1")

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"net/url"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"io"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import "golang.org/x/net/context"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"net/url"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"net/url"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"net/url"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"net/url"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"net/url"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"net/url"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"net/url"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import "golang.org/x/net/context"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"
@ -12,6 +12,9 @@ import (
func (cli *Client) DistributionInspect(ctx context.Context, image, encodedRegistryAuth string) (registrytypes.DistributionInspect, error) {
// Contact the registry to retrieve digest and platform information
var distributionInspect registrytypes.DistributionInspect
if image == "" {
return distributionInspect, objectNotFoundError{object: "distribution", id: image}
}
if err := cli.NewVersionError("1.30", "distribution inspect"); err != nil {
return distributionInspect, err

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"fmt"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"bufio"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/base64"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"io"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"io"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"bytes"
@ -11,6 +11,9 @@ import (
// ImageInspectWithRaw returns the image information and its raw representation.
func (cli *Client) ImageInspectWithRaw(ctx context.Context, imageID string) (types.ImageInspect, []byte, error) {
if imageID == "" {
return types.ImageInspect{}, nil, objectNotFoundError{object: "image", id: imageID}
}
serverResp, err := cli.get(ctx, "/images/"+imageID+"/json", nil, nil)
if err != nil {
return types.ImageInspect{}, nil, wrapResponseError(err, serverResp, "image", imageID)

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"io"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"io"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"errors"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"io"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"net/url"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"encoding/json"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"io"

View File

@ -1,4 +1,4 @@
package client
package client // import "github.com/docker/docker/client"
import (
"github.com/docker/docker/api/types"

Some files were not shown because too many files have changed in this diff Show More