mirror of https://github.com/docker/cli.git
Update docker dependency
We need the `pkg/term` dep from docker with OPOST added to the MakeRaw call in order for the new runc 1.0 integration to work properly. Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
parent
0f6f1eafe3
commit
56ea98f5ad
|
@ -6,7 +6,7 @@ github.com/agl/ed25519 d2b94fd789ea21d12fac1a4443dd3a3f79cda72c
|
||||||
github.com/coreos/etcd 824277cb3a577a0e8c829ca9ec557b973fe06d20
|
github.com/coreos/etcd 824277cb3a577a0e8c829ca9ec557b973fe06d20
|
||||||
github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76
|
github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76
|
||||||
github.com/docker/distribution b38e5838b7b2f2ad48e06ec4b500011976080621
|
github.com/docker/distribution b38e5838b7b2f2ad48e06ec4b500011976080621
|
||||||
github.com/docker/docker e8c2a33b747ac1f69d3992a47844abf1d7f58910
|
github.com/docker/docker f02a5b50c407bdb087388e18e1ac619f2788dd8d
|
||||||
github.com/docker/docker-credential-helpers v0.5.0
|
github.com/docker/docker-credential-helpers v0.5.0
|
||||||
github.com/docker/go d30aec9fd63c35133f8f79c3412ad91a3b08be06
|
github.com/docker/go d30aec9fd63c35133f8f79c3412ad91a3b08be06
|
||||||
github.com/docker/go-connections e15c02316c12de00874640cd76311849de2aeed5
|
github.com/docker/go-connections e15c02316c12de00874640cd76311849de2aeed5
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
package manifest
|
155
vendor/github.com/docker/distribution/manifest/manifestlist/manifestlist.go
generated
vendored
Normal file
155
vendor/github.com/docker/distribution/manifest/manifestlist/manifestlist.go
generated
vendored
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
package manifestlist
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/docker/distribution"
|
||||||
|
"github.com/docker/distribution/manifest"
|
||||||
|
"github.com/opencontainers/go-digest"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MediaTypeManifestList specifies the mediaType for manifest lists.
|
||||||
|
const MediaTypeManifestList = "application/vnd.docker.distribution.manifest.list.v2+json"
|
||||||
|
|
||||||
|
// SchemaVersion provides a pre-initialized version structure for this
|
||||||
|
// packages version of the manifest.
|
||||||
|
var SchemaVersion = manifest.Versioned{
|
||||||
|
SchemaVersion: 2,
|
||||||
|
MediaType: MediaTypeManifestList,
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
manifestListFunc := func(b []byte) (distribution.Manifest, distribution.Descriptor, error) {
|
||||||
|
m := new(DeserializedManifestList)
|
||||||
|
err := m.UnmarshalJSON(b)
|
||||||
|
if err != nil {
|
||||||
|
return nil, distribution.Descriptor{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
dgst := digest.FromBytes(b)
|
||||||
|
return m, distribution.Descriptor{Digest: dgst, Size: int64(len(b)), MediaType: MediaTypeManifestList}, err
|
||||||
|
}
|
||||||
|
err := distribution.RegisterManifestSchema(MediaTypeManifestList, manifestListFunc)
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Sprintf("Unable to register manifest: %s", err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PlatformSpec specifies a platform where a particular image manifest is
|
||||||
|
// applicable.
|
||||||
|
type PlatformSpec struct {
|
||||||
|
// Architecture field specifies the CPU architecture, for example
|
||||||
|
// `amd64` or `ppc64`.
|
||||||
|
Architecture string `json:"architecture"`
|
||||||
|
|
||||||
|
// OS specifies the operating system, for example `linux` or `windows`.
|
||||||
|
OS string `json:"os"`
|
||||||
|
|
||||||
|
// OSVersion is an optional field specifying the operating system
|
||||||
|
// version, for example `10.0.10586`.
|
||||||
|
OSVersion string `json:"os.version,omitempty"`
|
||||||
|
|
||||||
|
// OSFeatures is an optional field specifying an array of strings,
|
||||||
|
// each listing a required OS feature (for example on Windows `win32k`).
|
||||||
|
OSFeatures []string `json:"os.features,omitempty"`
|
||||||
|
|
||||||
|
// Variant is an optional field specifying a variant of the CPU, for
|
||||||
|
// example `ppc64le` to specify a little-endian version of a PowerPC CPU.
|
||||||
|
Variant string `json:"variant,omitempty"`
|
||||||
|
|
||||||
|
// Features is an optional field specifying an array of strings, each
|
||||||
|
// listing a required CPU feature (for example `sse4` or `aes`).
|
||||||
|
Features []string `json:"features,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// A ManifestDescriptor references a platform-specific manifest.
|
||||||
|
type ManifestDescriptor struct {
|
||||||
|
distribution.Descriptor
|
||||||
|
|
||||||
|
// Platform specifies which platform the manifest pointed to by the
|
||||||
|
// descriptor runs on.
|
||||||
|
Platform PlatformSpec `json:"platform"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ManifestList references manifests for various platforms.
|
||||||
|
type ManifestList struct {
|
||||||
|
manifest.Versioned
|
||||||
|
|
||||||
|
// Config references the image configuration as a blob.
|
||||||
|
Manifests []ManifestDescriptor `json:"manifests"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// References returnes the distribution descriptors for the referenced image
|
||||||
|
// manifests.
|
||||||
|
func (m ManifestList) References() []distribution.Descriptor {
|
||||||
|
dependencies := make([]distribution.Descriptor, len(m.Manifests))
|
||||||
|
for i := range m.Manifests {
|
||||||
|
dependencies[i] = m.Manifests[i].Descriptor
|
||||||
|
}
|
||||||
|
|
||||||
|
return dependencies
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeserializedManifestList wraps ManifestList with a copy of the original
|
||||||
|
// JSON.
|
||||||
|
type DeserializedManifestList struct {
|
||||||
|
ManifestList
|
||||||
|
|
||||||
|
// canonical is the canonical byte representation of the Manifest.
|
||||||
|
canonical []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromDescriptors takes a slice of descriptors, and returns a
|
||||||
|
// DeserializedManifestList which contains the resulting manifest list
|
||||||
|
// and its JSON representation.
|
||||||
|
func FromDescriptors(descriptors []ManifestDescriptor) (*DeserializedManifestList, error) {
|
||||||
|
m := ManifestList{
|
||||||
|
Versioned: SchemaVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
m.Manifests = make([]ManifestDescriptor, len(descriptors), len(descriptors))
|
||||||
|
copy(m.Manifests, descriptors)
|
||||||
|
|
||||||
|
deserialized := DeserializedManifestList{
|
||||||
|
ManifestList: m,
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
deserialized.canonical, err = json.MarshalIndent(&m, "", " ")
|
||||||
|
return &deserialized, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON populates a new ManifestList struct from JSON data.
|
||||||
|
func (m *DeserializedManifestList) UnmarshalJSON(b []byte) error {
|
||||||
|
m.canonical = make([]byte, len(b), len(b))
|
||||||
|
// store manifest list in canonical
|
||||||
|
copy(m.canonical, b)
|
||||||
|
|
||||||
|
// Unmarshal canonical JSON into ManifestList object
|
||||||
|
var manifestList ManifestList
|
||||||
|
if err := json.Unmarshal(m.canonical, &manifestList); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
m.ManifestList = manifestList
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalJSON returns the contents of canonical. If canonical is empty,
|
||||||
|
// marshals the inner contents.
|
||||||
|
func (m *DeserializedManifestList) MarshalJSON() ([]byte, error) {
|
||||||
|
if len(m.canonical) > 0 {
|
||||||
|
return m.canonical, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, errors.New("JSON representation not initialized in DeserializedManifestList")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Payload returns the raw content of the manifest list. The contents can be
|
||||||
|
// used to calculate the content identifier.
|
||||||
|
func (m DeserializedManifestList) Payload() (string, []byte, error) {
|
||||||
|
return m.MediaType, m.canonical, nil
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package manifest
|
||||||
|
|
||||||
|
// Versioned provides a struct with the manifest schemaVersion and mediaType.
|
||||||
|
// Incoming content with unknown schema version can be decoded against this
|
||||||
|
// struct to check the version.
|
||||||
|
type Versioned struct {
|
||||||
|
// SchemaVersion is the image manifest schema that this image follows
|
||||||
|
SchemaVersion int `json:"schemaVersion"`
|
||||||
|
|
||||||
|
// MediaType is the media type of this schema.
|
||||||
|
MediaType string `json:"mediaType,omitempty"`
|
||||||
|
}
|
|
@ -3,6 +3,9 @@ package registry
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
|
"github.com/docker/distribution"
|
||||||
|
"github.com/docker/distribution/manifest/manifestlist"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ServiceConfig stores daemon registry services configuration.
|
// ServiceConfig stores daemon registry services configuration.
|
||||||
|
@ -102,3 +105,14 @@ type SearchResults struct {
|
||||||
// Results is a slice containing the actual results for the search
|
// Results is a slice containing the actual results for the search
|
||||||
Results []SearchResult `json:"results"`
|
Results []SearchResult `json:"results"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DistributionInspect describes the result obtained from contacting the
|
||||||
|
// registry to retrieve image metadata
|
||||||
|
type DistributionInspect struct {
|
||||||
|
// Descriptor contains information about the manifest, including
|
||||||
|
// the content addressable digest
|
||||||
|
Descriptor distribution.Descriptor
|
||||||
|
// Platforms contains the list of platforms supported by the image,
|
||||||
|
// obtained by parsing the manifest
|
||||||
|
Platforms []manifestlist.PlatformSpec
|
||||||
|
}
|
||||||
|
|
|
@ -25,3 +25,16 @@ type Driver struct {
|
||||||
Name string `json:",omitempty"`
|
Name string `json:",omitempty"`
|
||||||
Options map[string]string `json:",omitempty"`
|
Options map[string]string `json:",omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TLSInfo represents the TLS information about what CA certificate is trusted,
|
||||||
|
// and who the issuer for a TLS certificate is
|
||||||
|
type TLSInfo struct {
|
||||||
|
// TrustRoot is the trusted CA root certificate in PEM format
|
||||||
|
TrustRoot string `json:",omitempty"`
|
||||||
|
|
||||||
|
// CertIssuer is the raw subject bytes of the issuer
|
||||||
|
CertIssuerSubject []byte `json:",omitempty"`
|
||||||
|
|
||||||
|
// CertIssuerPublicKey is the raw public key bytes of the issuer
|
||||||
|
CertIssuerPublicKey []byte `json:",omitempty"`
|
||||||
|
}
|
||||||
|
|
|
@ -52,6 +52,7 @@ type NodeDescription struct {
|
||||||
Platform Platform `json:",omitempty"`
|
Platform Platform `json:",omitempty"`
|
||||||
Resources Resources `json:",omitempty"`
|
Resources Resources `json:",omitempty"`
|
||||||
Engine EngineDescription `json:",omitempty"`
|
Engine EngineDescription `json:",omitempty"`
|
||||||
|
TLSInfo TLSInfo `json:",omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Platform represents the platform (Arch/OS).
|
// Platform represents the platform (Arch/OS).
|
||||||
|
|
|
@ -8,6 +8,8 @@ type ClusterInfo struct {
|
||||||
ID string
|
ID string
|
||||||
Meta
|
Meta
|
||||||
Spec Spec
|
Spec Spec
|
||||||
|
TLSInfo TLSInfo
|
||||||
|
RootRotationInProgress bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swarm represents a swarm.
|
// Swarm represents a swarm.
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
package ioutils
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
)
|
|
||||||
|
|
||||||
// FprintfIfNotEmpty prints the string value if it's not empty
|
|
||||||
func FprintfIfNotEmpty(w io.Writer, format, value string) (int, error) {
|
|
||||||
if value != "" {
|
|
||||||
return fmt.Fprintf(w, format, value)
|
|
||||||
}
|
|
||||||
return 0, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// FprintfIfTrue prints the boolean value if it's true
|
|
||||||
func FprintfIfTrue(w io.Writer, format string, ok bool) (int, error) {
|
|
||||||
if ok {
|
|
||||||
return fmt.Fprintf(w, format, ok)
|
|
||||||
}
|
|
||||||
return 0, nil
|
|
||||||
}
|
|
|
@ -1,6 +1,7 @@
|
||||||
package templates
|
package templates
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"strings"
|
"strings"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
@ -10,8 +11,12 @@ import (
|
||||||
// functions provided to every template.
|
// functions provided to every template.
|
||||||
var basicFunctions = template.FuncMap{
|
var basicFunctions = template.FuncMap{
|
||||||
"json": func(v interface{}) string {
|
"json": func(v interface{}) string {
|
||||||
a, _ := json.Marshal(v)
|
buf := &bytes.Buffer{}
|
||||||
return string(a)
|
enc := json.NewEncoder(buf)
|
||||||
|
enc.SetEscapeHTML(false)
|
||||||
|
enc.Encode(v)
|
||||||
|
// Remove the trailing new line added by the encoder
|
||||||
|
return strings.TrimSpace(buf.String())
|
||||||
},
|
},
|
||||||
"split": strings.Split,
|
"split": strings.Split,
|
||||||
"join": strings.Join,
|
"join": strings.Join,
|
||||||
|
|
|
@ -35,7 +35,7 @@ func MakeRaw(fd uintptr) (*State, error) {
|
||||||
newState := oldState.termios
|
newState := oldState.termios
|
||||||
|
|
||||||
newState.Iflag &^= (syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON)
|
newState.Iflag &^= (syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON)
|
||||||
newState.Oflag &^= syscall.OPOST
|
newState.Oflag |= syscall.OPOST
|
||||||
newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN)
|
newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN)
|
||||||
newState.Cflag &^= (syscall.CSIZE | syscall.PARENB)
|
newState.Cflag &^= (syscall.CSIZE | syscall.PARENB)
|
||||||
newState.Cflag |= syscall.CS8
|
newState.Cflag |= syscall.CS8
|
||||||
|
|
|
@ -79,6 +79,11 @@ func DecodeContainerConfig(src io.Reader) (*container.Config, *container.HostCon
|
||||||
return nil, nil, nil, err
|
return nil, nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Validate ReadonlyRootfs
|
||||||
|
if err := validateReadonlyRootfs(hc); err != nil {
|
||||||
|
return nil, nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return w.Config, hc, w.NetworkingConfig, nil
|
return w.Config, hc, w.NetworkingConfig, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -103,3 +103,8 @@ func validateResources(hc *container.HostConfig, si *sysinfo.SysInfo) error {
|
||||||
func validatePrivileged(hc *container.HostConfig) error {
|
func validatePrivileged(hc *container.HostConfig) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// validateReadonlyRootfs performs platform specific validation of the ReadonlyRootfs setting
|
||||||
|
func validateReadonlyRootfs(hc *container.HostConfig) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -82,3 +82,15 @@ func validatePrivileged(hc *container.HostConfig) error {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// validateReadonlyRootfs performs platform specific validation of the ReadonlyRootfs setting
|
||||||
|
func validateReadonlyRootfs(hc *container.HostConfig) error {
|
||||||
|
// We may not be passed a host config, such as in the case of docker commit
|
||||||
|
if hc == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if hc.ReadonlyRootfs {
|
||||||
|
return fmt.Errorf("invalid --read-only: Windows does not support this feature")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# the following lines are in sorted order, FYI
|
# the following lines are in sorted order, FYI
|
||||||
github.com/Azure/go-ansiterm 388960b655244e76e24c75f48631564eaefade62
|
github.com/Azure/go-ansiterm 388960b655244e76e24c75f48631564eaefade62
|
||||||
github.com/Microsoft/hcsshim v0.5.13
|
github.com/Microsoft/hcsshim v0.5.17
|
||||||
github.com/Microsoft/go-winio v0.3.9
|
github.com/Microsoft/go-winio v0.4.0
|
||||||
github.com/Sirupsen/logrus v0.11.0
|
github.com/Sirupsen/logrus v0.11.0
|
||||||
github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76
|
github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76
|
||||||
github.com/docker/libtrust 9cbd2a1374f46905c68a4eb3694a130610adc62a
|
github.com/docker/libtrust 9cbd2a1374f46905c68a4eb3694a130610adc62a
|
||||||
|
@ -56,13 +56,8 @@ github.com/opencontainers/go-digest a6d0ee40d4207ea02364bd3b9e8e77b9159ba1eb
|
||||||
github.com/mistifyio/go-zfs 22c9b32c84eb0d0c6f4043b6e90fc94073de92fa
|
github.com/mistifyio/go-zfs 22c9b32c84eb0d0c6f4043b6e90fc94073de92fa
|
||||||
github.com/pborman/uuid v1.0
|
github.com/pborman/uuid v1.0
|
||||||
|
|
||||||
# get desired notary commit, might also need to be updated in Dockerfile
|
|
||||||
github.com/docker/notary v0.4.2
|
|
||||||
|
|
||||||
google.golang.org/grpc v1.0.4
|
google.golang.org/grpc v1.0.4
|
||||||
github.com/miekg/pkcs11 df8ae6ca730422dba20c768ff38ef7d79077a59f
|
github.com/miekg/pkcs11 df8ae6ca730422dba20c768ff38ef7d79077a59f
|
||||||
github.com/docker/go v1.5.1-1-1-gbaf439e
|
|
||||||
github.com/agl/ed25519 d2b94fd789ea21d12fac1a4443dd3a3f79cda72c
|
|
||||||
|
|
||||||
# When updating, also update RUNC_COMMIT in hack/dockerfile/binaries-commits accordingly
|
# When updating, also update RUNC_COMMIT in hack/dockerfile/binaries-commits accordingly
|
||||||
github.com/opencontainers/runc b6b70e53451794e8333e9b602cc096b47a20bd0f
|
github.com/opencontainers/runc b6b70e53451794e8333e9b602cc096b47a20bd0f
|
||||||
|
@ -106,7 +101,7 @@ google.golang.org/genproto b3e7c2fb04031add52c4817f53f43757ccbf9c18
|
||||||
github.com/docker/docker-credential-helpers v0.5.0
|
github.com/docker/docker-credential-helpers v0.5.0
|
||||||
|
|
||||||
# containerd
|
# containerd
|
||||||
github.com/docker/containerd d24f39e203aa6be4944f06dd0fe38a618a36c764
|
github.com/docker/containerd 8ef7df579710405c4bb6e0812495671002ce08e0
|
||||||
github.com/tonistiigi/fifo 1405643975692217d6720f8b54aeee1bf2cd5cf4
|
github.com/tonistiigi/fifo 1405643975692217d6720f8b54aeee1bf2cd5cf4
|
||||||
|
|
||||||
# cluster
|
# cluster
|
||||||
|
@ -134,16 +129,18 @@ github.com/grpc-ecosystem/go-grpc-prometheus 6b7015e65d366bf3f19b2b2a000a831940f
|
||||||
github.com/spf13/cobra v1.5.1 https://github.com/dnephin/cobra.git
|
github.com/spf13/cobra v1.5.1 https://github.com/dnephin/cobra.git
|
||||||
github.com/spf13/pflag 9ff6c6923cfffbcd502984b8e0c80539a94968b7
|
github.com/spf13/pflag 9ff6c6923cfffbcd502984b8e0c80539a94968b7
|
||||||
github.com/inconshreveable/mousetrap 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75
|
github.com/inconshreveable/mousetrap 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75
|
||||||
github.com/flynn-archive/go-shlex 3f9db97f856818214da2e1057f8ad84803971cff
|
|
||||||
github.com/Nvveen/Gotty a8b993ba6abdb0e0c12b0125c603323a71c7790c https://github.com/ijc25/Gotty
|
github.com/Nvveen/Gotty a8b993ba6abdb0e0c12b0125c603323a71c7790c https://github.com/ijc25/Gotty
|
||||||
|
|
||||||
# metrics
|
# metrics
|
||||||
github.com/docker/go-metrics 8fd5772bf1584597834c6f7961a530f06cbfbb87
|
github.com/docker/go-metrics 8fd5772bf1584597834c6f7961a530f06cbfbb87
|
||||||
|
|
||||||
|
<<<<<<< 0f6f1eafe31c4beceba31490017878b80b609331
|
||||||
# composefile
|
# composefile
|
||||||
github.com/mitchellh/mapstructure f3009df150dadf309fdee4a54ed65c124afad715
|
github.com/mitchellh/mapstructure f3009df150dadf309fdee4a54ed65c124afad715
|
||||||
github.com/xeipuuv/gojsonpointer e0fe6f68307607d540ed8eac07a342c33fa1b54a
|
github.com/xeipuuv/gojsonpointer e0fe6f68307607d540ed8eac07a342c33fa1b54a
|
||||||
github.com/xeipuuv/gojsonreference e02fc20de94c78484cd5ffb007f8af96be030a45
|
github.com/xeipuuv/gojsonreference e02fc20de94c78484cd5ffb007f8af96be030a45
|
||||||
github.com/xeipuuv/gojsonschema 93e72a773fade158921402d6a24c819b48aba29d
|
github.com/xeipuuv/gojsonschema 93e72a773fade158921402d6a24c819b48aba29d
|
||||||
gopkg.in/yaml.v2 4c78c975fe7c825c6d1466c42be594d1d6f3aba6
|
gopkg.in/yaml.v2 4c78c975fe7c825c6d1466c42be594d1d6f3aba6
|
||||||
|
=======
|
||||||
|
>>>>>>> Update docker dependency
|
||||||
github.com/opencontainers/selinux v1.0.0-rc1
|
github.com/opencontainers/selinux v1.0.0-rc1
|
||||||
|
|
|
@ -120,6 +120,28 @@ type MountPoint struct {
|
||||||
|
|
||||||
// Sepc is a copy of the API request that created this mount.
|
// Sepc is a copy of the API request that created this mount.
|
||||||
Spec mounttypes.Mount
|
Spec mounttypes.Mount
|
||||||
|
|
||||||
|
// Track usage of this mountpoint
|
||||||
|
// Specicially needed for containers which are running and calls to `docker cp`
|
||||||
|
// because both these actions require mounting the volumes.
|
||||||
|
active int
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cleanup frees resources used by the mountpoint
|
||||||
|
func (m *MountPoint) Cleanup() error {
|
||||||
|
if m.Volume == nil || m.ID == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := m.Volume.Unmount(m.ID); err != nil {
|
||||||
|
return errors.Wrapf(err, "error unmounting volume %s", m.Volume.Name())
|
||||||
|
}
|
||||||
|
|
||||||
|
m.active--
|
||||||
|
if m.active == 0 {
|
||||||
|
m.ID = ""
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup sets up a mount point by either mounting the volume if it is
|
// Setup sets up a mount point by either mounting the volume if it is
|
||||||
|
@ -147,12 +169,16 @@ func (m *MountPoint) Setup(mountLabel string, rootUID, rootGID int) (path string
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.Wrapf(err, "error while mounting volume '%s'", m.Source)
|
return "", errors.Wrapf(err, "error while mounting volume '%s'", m.Source)
|
||||||
}
|
}
|
||||||
|
|
||||||
m.ID = id
|
m.ID = id
|
||||||
|
m.active++
|
||||||
return path, nil
|
return path, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(m.Source) == 0 {
|
if len(m.Source) == 0 {
|
||||||
return "", fmt.Errorf("Unable to setup mount point, neither source nor volume defined")
|
return "", fmt.Errorf("Unable to setup mount point, neither source nor volume defined")
|
||||||
}
|
}
|
||||||
|
|
||||||
// system.MkdirAll() produces an error if m.Source exists and is a file (not a directory),
|
// system.MkdirAll() produces an error if m.Source exists and is a file (not a directory),
|
||||||
if m.Type == mounttypes.TypeBind {
|
if m.Type == mounttypes.TypeBind {
|
||||||
// idtools.MkdirAllNewAs() produces an error if m.Source exists and is a file (not a directory)
|
// idtools.MkdirAllNewAs() produces an error if m.Source exists and is a file (not a directory)
|
||||||
|
|
Loading…
Reference in New Issue