Merge pull request #8042 from greut/docker-v19.03.9

docker v19.03.10
This commit is contained in:
Mahmood Ali
2020-06-02 10:14:14 -04:00
committed by GitHub
15 changed files with 148 additions and 117 deletions

View File

@@ -442,7 +442,7 @@ func newTarAppender(idMapping *idtools.IdentityMapping, writer io.Writer, chownO
}
// canonicalTarName provides a platform-independent and consistent posix-style
// path for files and directories to be archived regardless of the platform.
//path for files and directories to be archived regardless of the platform.
func canonicalTarName(name string, isDir bool) string {
name = CanonicalTarNameForPath(name)
@@ -495,13 +495,13 @@ func (ta *tarAppender) addTarFile(path, name string) error {
}
}
// check whether the file is overlayfs whiteout
// if yes, skip re-mapping container ID mappings.
//check whether the file is overlayfs whiteout
//if yes, skip re-mapping container ID mappings.
isOverlayWhiteout := fi.Mode()&os.ModeCharDevice != 0 && hdr.Devmajor == 0 && hdr.Devminor == 0
// handle re-mapping container ID mappings back to host ID mappings before
// writing tar headers/files. We skip whiteout files because they were written
// by the kernel and already have proper ownership relative to the host
//handle re-mapping container ID mappings back to host ID mappings before
//writing tar headers/files. We skip whiteout files because they were written
//by the kernel and already have proper ownership relative to the host
if !isOverlayWhiteout && !strings.HasPrefix(filepath.Base(hdr.Name), WhiteoutPrefix) && !ta.IdentityMapping.Empty() {
fileIDPair, err := getFileUIDGID(fi.Sys())
if err != nil {

View File

@@ -10,7 +10,6 @@ import (
"syscall"
"github.com/containerd/continuity/fs"
"github.com/docker/docker/pkg/mount"
"github.com/docker/docker/pkg/system"
"github.com/pkg/errors"
"golang.org/x/sys/unix"
@@ -153,8 +152,9 @@ func mknodChar0Overlay(cleansedOriginalPath string) error {
return errors.Wrapf(err, "failed to create a dummy lower file %s", lowerDummy)
}
mOpts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", lower, upper, work)
if err := mount.Mount("overlay", merged, "overlay", mOpts); err != nil {
return err
// docker/pkg/mount.Mount() requires procfs to be mounted. So we use syscall.Mount() directly instead.
if err := syscall.Mount("overlay", merged, "overlay", uintptr(0), mOpts); err != nil {
return errors.Wrapf(err, "failed to mount overlay (%s) on %s", mOpts, merged)
}
mergedDummy := filepath.Join(merged, dummyBase)
if err := os.Remove(mergedDummy); err != nil {
@@ -237,8 +237,9 @@ func createDirWithOverlayOpaque(tmp string) (string, error) {
return "", errors.Wrapf(err, "failed to create a dummy lower directory %s", lowerDummy)
}
mOpts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", lower, upper, work)
if err := mount.Mount("overlay", merged, "overlay", mOpts); err != nil {
return "", err
// docker/pkg/mount.Mount() requires procfs to be mounted. So we use syscall.Mount() directly instead.
if err := syscall.Mount("overlay", merged, "overlay", uintptr(0), mOpts); err != nil {
return "", errors.Wrapf(err, "failed to mount overlay (%s) on %s", mOpts, merged)
}
mergedDummy := filepath.Join(merged, dummyBase)
if err := os.Remove(mergedDummy); err != nil {

View File

@@ -31,7 +31,7 @@ func CanonicalTarNameForPath(p string) string {
// chmodTarEntry is used to adjust the file permissions used in tar header based
// on the platform the archival is done.
func chmodTarEntry(perm os.FileMode) os.FileMode {
// perm &= 0755 // this 0-ed out tar flags (like link, regular file, directory marker etc.)
//perm &= 0755 // this 0-ed out tar flags (like link, regular file, directory marker etc.)
permPart := perm & os.ModePerm
noPermPart := perm &^ os.ModePerm
// Add the x bit: make everything +x from windows

View File

@@ -18,8 +18,8 @@ func resolveBinary(binname string) (string, error) {
if err != nil {
return "", err
}
// only return no error if the final resolved binary basename
// matches what was searched for
//only return no error if the final resolved binary basename
//matches what was searched for
if filepath.Base(resolvedPath) == binname {
return resolvedPath, nil
}

View File

@@ -6,9 +6,9 @@ import (
"time"
)
// setCTime will set the create time on a file. On Unix, the create
// time is updated as a side effect of setting the modified time, so
// no action is required.
//setCTime will set the create time on a file. On Unix, the create
//time is updated as a side effect of setting the modified time, so
//no action is required.
func setCTime(path string, ctime time.Time) error {
return nil
}

View File

@@ -6,8 +6,8 @@ import (
"golang.org/x/sys/windows"
)
// setCTime will set the create time on a file. On Windows, this requires
// calling SetFileTime and explicitly including the create time.
//setCTime will set the create time on a file. On Windows, this requires
//calling SetFileTime and explicitly including the create time.
func setCTime(path string, ctime time.Time) error {
ctimespec := windows.NsecToTimespec(ctime.UnixNano())
pathp, e := windows.UTF16PtrFromString(path)

View File

@@ -130,10 +130,12 @@ func mkdirWithACL(name string, sddl string) error {
// by the daemon. This SHOULD be treated as absolute from a docker processing
// perspective.
func IsAbs(path string) bool {
if filepath.IsAbs(path) || strings.HasPrefix(path, string(os.PathSeparator)) {
return true
if !filepath.IsAbs(path) {
if !strings.HasPrefix(path, string(os.PathSeparator)) {
return false
}
}
return false
return true
}
// The origin of the functions below here are the golang OS and windows packages,
@@ -233,7 +235,7 @@ func windowsOpenSequential(path string, mode int, _ uint32) (fd windows.Handle,
createmode = windows.OPEN_EXISTING
}
// Use FILE_FLAG_SEQUENTIAL_SCAN rather than FILE_ATTRIBUTE_NORMAL as implemented in golang.
// https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx
//https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx
const fileFlagSequentialScan = 0x08000000 // FILE_FLAG_SEQUENTIAL_SCAN
h, e := windows.CreateFile(pathp, access, sharemode, sa, createmode, fileFlagSequentialScan, 0)
return h, e

View File

@@ -1,27 +1,24 @@
package system // import "github.com/docker/docker/pkg/system"
import "golang.org/x/sys/windows"
import "syscall"
// GetLongPathName converts Windows short pathnames to full pathnames.
// For example C:\Users\ADMIN~1 --> C:\Users\Administrator.
// It is a no-op on non-Windows platforms
func GetLongPathName(path string) (string, error) {
// See https://groups.google.com/forum/#!topic/golang-dev/1tufzkruoTg
p, err := windows.UTF16FromString(path)
if err != nil {
return "", err
}
p := syscall.StringToUTF16(path)
b := p // GetLongPathName says we can reuse buffer
n, err := windows.GetLongPathName(&p[0], &b[0], uint32(len(b)))
n, err := syscall.GetLongPathName(&p[0], &b[0], uint32(len(b)))
if err != nil {
return "", err
}
if n > uint32(len(b)) {
b = make([]uint16, n)
_, err = windows.GetLongPathName(&p[0], &b[0], uint32(len(b)))
_, err = syscall.GetLongPathName(&p[0], &b[0], uint32(len(b)))
if err != nil {
return "", err
}
}
return windows.UTF16ToString(b), nil
return syscall.UTF16ToString(b), nil
}

View File

@@ -13,6 +13,6 @@ func IsProcessAlive(pid int) bool {
func KillProcess(pid int) {
p, err := os.FindProcess(pid)
if err == nil {
_ = p.Kill()
p.Kill()
}
}

View File

@@ -63,8 +63,12 @@ func EnsureRemoveAll(dir string) error {
return err
}
if e := mount.Unmount(pe.Path); e != nil {
return errors.Wrapf(e, "error while removing %s", dir)
if mounted, _ := mount.Mounted(pe.Path); mounted {
if e := mount.Unmount(pe.Path); e != nil {
if mounted, _ := mount.Mounted(pe.Path); mounted {
return errors.Wrapf(e, "error while removing %s", dir)
}
}
}
if exitOnErr[pe.Path] == maxRetry {

View File

@@ -9,3 +9,9 @@ import "golang.org/x/sys/unix"
func Unmount(dest string) error {
return unix.Unmount(dest, 0)
}
// CommandLineToArgv should not be used on Unix.
// It simply returns commandLine in the only element in the returned array.
func CommandLineToArgv(commandLine string) ([]string, error) {
return []string{commandLine}, nil
}

View File

@@ -1,6 +1,7 @@
package system // import "github.com/docker/docker/pkg/system"
import (
"fmt"
"syscall"
"unsafe"
@@ -10,36 +11,36 @@ import (
)
const (
OWNER_SECURITY_INFORMATION = windows.OWNER_SECURITY_INFORMATION // Deprecated: use golang.org/x/sys/windows.OWNER_SECURITY_INFORMATION
GROUP_SECURITY_INFORMATION = windows.GROUP_SECURITY_INFORMATION // Deprecated: use golang.org/x/sys/windows.GROUP_SECURITY_INFORMATION
DACL_SECURITY_INFORMATION = windows.DACL_SECURITY_INFORMATION // Deprecated: use golang.org/x/sys/windows.DACL_SECURITY_INFORMATION
SACL_SECURITY_INFORMATION = windows.SACL_SECURITY_INFORMATION // Deprecated: use golang.org/x/sys/windows.SACL_SECURITY_INFORMATION
LABEL_SECURITY_INFORMATION = windows.LABEL_SECURITY_INFORMATION // Deprecated: use golang.org/x/sys/windows.LABEL_SECURITY_INFORMATION
ATTRIBUTE_SECURITY_INFORMATION = windows.ATTRIBUTE_SECURITY_INFORMATION // Deprecated: use golang.org/x/sys/windows.ATTRIBUTE_SECURITY_INFORMATION
SCOPE_SECURITY_INFORMATION = windows.SCOPE_SECURITY_INFORMATION // Deprecated: use golang.org/x/sys/windows.SCOPE_SECURITY_INFORMATION
OWNER_SECURITY_INFORMATION = 0x00000001
GROUP_SECURITY_INFORMATION = 0x00000002
DACL_SECURITY_INFORMATION = 0x00000004
SACL_SECURITY_INFORMATION = 0x00000008
LABEL_SECURITY_INFORMATION = 0x00000010
ATTRIBUTE_SECURITY_INFORMATION = 0x00000020
SCOPE_SECURITY_INFORMATION = 0x00000040
PROCESS_TRUST_LABEL_SECURITY_INFORMATION = 0x00000080
ACCESS_FILTER_SECURITY_INFORMATION = 0x00000100
BACKUP_SECURITY_INFORMATION = windows.BACKUP_SECURITY_INFORMATION // Deprecated: use golang.org/x/sys/windows.BACKUP_SECURITY_INFORMATION
PROTECTED_DACL_SECURITY_INFORMATION = windows.PROTECTED_DACL_SECURITY_INFORMATION // Deprecated: use golang.org/x/sys/windows.PROTECTED_DACL_SECURITY_INFORMATION
PROTECTED_SACL_SECURITY_INFORMATION = windows.PROTECTED_SACL_SECURITY_INFORMATION // Deprecated: use golang.org/x/sys/windows.PROTECTED_SACL_SECURITY_INFORMATION
UNPROTECTED_DACL_SECURITY_INFORMATION = windows.UNPROTECTED_DACL_SECURITY_INFORMATION // Deprecated: use golang.org/x/sys/windows.UNPROTECTED_DACL_SECURITY_INFORMATION
UNPROTECTED_SACL_SECURITY_INFORMATION = windows.UNPROTECTED_SACL_SECURITY_INFORMATION // Deprecated: use golang.org/x/sys/windows.UNPROTECTED_SACL_SECURITY_INFORMATION
BACKUP_SECURITY_INFORMATION = 0x00010000
PROTECTED_DACL_SECURITY_INFORMATION = 0x80000000
PROTECTED_SACL_SECURITY_INFORMATION = 0x40000000
UNPROTECTED_DACL_SECURITY_INFORMATION = 0x20000000
UNPROTECTED_SACL_SECURITY_INFORMATION = 0x10000000
)
const (
SE_UNKNOWN_OBJECT_TYPE = windows.SE_UNKNOWN_OBJECT_TYPE // Deprecated: use golang.org/x/sys/windows.SE_UNKNOWN_OBJECT_TYPE
SE_FILE_OBJECT = windows.SE_FILE_OBJECT // Deprecated: use golang.org/x/sys/windows.SE_FILE_OBJECT
SE_SERVICE = windows.SE_SERVICE // Deprecated: use golang.org/x/sys/windows.SE_SERVICE
SE_PRINTER = windows.SE_PRINTER // Deprecated: use golang.org/x/sys/windows.SE_PRINTER
SE_REGISTRY_KEY = windows.SE_REGISTRY_KEY // Deprecated: use golang.org/x/sys/windows.SE_REGISTRY_KEY
SE_LMSHARE = windows.SE_LMSHARE // Deprecated: use golang.org/x/sys/windows.SE_LMSHARE
SE_KERNEL_OBJECT = windows.SE_KERNEL_OBJECT // Deprecated: use golang.org/x/sys/windows.SE_KERNEL_OBJECT
SE_WINDOW_OBJECT = windows.SE_WINDOW_OBJECT // Deprecated: use golang.org/x/sys/windows.SE_WINDOW_OBJECT
SE_DS_OBJECT = windows.SE_DS_OBJECT // Deprecated: use golang.org/x/sys/windows.SE_DS_OBJECT
SE_DS_OBJECT_ALL = windows.SE_DS_OBJECT_ALL // Deprecated: use golang.org/x/sys/windows.SE_DS_OBJECT_ALL
SE_PROVIDER_DEFINED_OBJECT = windows.SE_PROVIDER_DEFINED_OBJECT // Deprecated: use golang.org/x/sys/windows.SE_PROVIDER_DEFINED_OBJECT
SE_WMIGUID_OBJECT = windows.SE_WMIGUID_OBJECT // Deprecated: use golang.org/x/sys/windows.SE_WMIGUID_OBJECT
SE_REGISTRY_WOW64_32KEY = windows.SE_REGISTRY_WOW64_32KEY // Deprecated: use golang.org/x/sys/windows.SE_REGISTRY_WOW64_32KEY
SE_UNKNOWN_OBJECT_TYPE = iota
SE_FILE_OBJECT
SE_SERVICE
SE_PRINTER
SE_REGISTRY_KEY
SE_LMSHARE
SE_KERNEL_OBJECT
SE_WINDOW_OBJECT
SE_DS_OBJECT
SE_DS_OBJECT_ALL
SE_PROVIDER_DEFINED_OBJECT
SE_WMIGUID_OBJECT
SE_REGISTRY_WOW64_32KEY
)
const (
@@ -61,10 +62,9 @@ var (
// OSVersion is a wrapper for Windows version information
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx
type OSVersion = osversion.OSVersion
type OSVersion osversion.OSVersion
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms724833(v=vs.85).aspx
// TODO: use golang.org/x/sys/windows.OsVersionInfoEx (needs OSVersionInfoSize to be exported)
type osVersionInfoEx struct {
OSVersionInfoSize uint32
MajorVersion uint32
@@ -83,10 +83,16 @@ type osVersionInfoEx struct {
// dockerd.exe must be manifested to get the correct version information.
// Deprecated: use github.com/Microsoft/hcsshim/osversion.Get() instead
func GetOSVersion() OSVersion {
return osversion.Get()
return OSVersion(osversion.Get())
}
func (osv OSVersion) ToString() string {
return fmt.Sprintf("%d.%d.%d", osv.MajorVersion, osv.MinorVersion, osv.Build)
}
// IsWindowsClient returns true if the SKU is client
// @engine maintainers - this function should not be removed or modified as it
// is used to enforce licensing restrictions on Windows.
func IsWindowsClient() bool {
osviex := &osVersionInfoEx{OSVersionInfoSize: 284}
r1, _, err := procGetVersionExW.Call(uintptr(unsafe.Pointer(osviex)))
@@ -100,10 +106,33 @@ func IsWindowsClient() bool {
// Unmount is a platform-specific helper function to call
// the unmount syscall. Not supported on Windows
func Unmount(_ string) error {
func Unmount(dest string) error {
return nil
}
// CommandLineToArgv wraps the Windows syscall to turn a commandline into an argument array.
func CommandLineToArgv(commandLine string) ([]string, error) {
var argc int32
argsPtr, err := windows.UTF16PtrFromString(commandLine)
if err != nil {
return nil, err
}
argv, err := windows.CommandLineToArgv(argsPtr, &argc)
if err != nil {
return nil, err
}
defer windows.LocalFree(windows.Handle(uintptr(unsafe.Pointer(argv))))
newArgs := make([]string, argc)
for i, v := range (*argv)[:argc] {
newArgs[i] = string(windows.UTF16ToString((*v)[:]))
}
return newArgs, nil
}
// HasWin32KSupport determines whether containers that depend on win32k can
// run on this machine. Win32k is the driver used to implement windowing.
func HasWin32KSupport() bool {
@@ -125,7 +154,7 @@ func GetSecurityDescriptorDacl(securityDescriptor *byte, daclPresent *uint32, da
r1, _, e1 := syscall.Syscall6(procGetSecurityDescriptorDacl.Addr(), 4, uintptr(unsafe.Pointer(securityDescriptor)), uintptr(unsafe.Pointer(daclPresent)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(daclDefaulted)), 0, 0)
if r1 == 0 {
if e1 != 0 {
result = e1
result = syscall.Errno(e1)
} else {
result = syscall.EINVAL
}

View File

@@ -6,24 +6,16 @@ import "golang.org/x/sys/unix"
// and associated with the given path in the file system.
// It will returns a nil slice and nil error if the xattr is not set.
func Lgetxattr(path string, attr string) ([]byte, error) {
// Start with a 128 length byte array
dest := make([]byte, 128)
sz, errno := unix.Lgetxattr(path, attr, dest)
for errno == unix.ERANGE {
// Buffer too small, use zero-sized buffer to get the actual size
sz, errno = unix.Lgetxattr(path, attr, []byte{})
if errno != nil {
return nil, errno
}
if errno == unix.ENODATA {
return nil, nil
}
if errno == unix.ERANGE {
dest = make([]byte, sz)
sz, errno = unix.Lgetxattr(path, attr, dest)
}
switch {
case errno == unix.ENODATA:
return nil, nil
case errno != nil:
if errno != nil {
return nil, errno
}

View File

@@ -113,7 +113,7 @@ func (m *MountPoint) Setup(mountLabel string, rootIDs idtools.Identity, checkFun
return
}
err = label.Relabel(sourcePath, mountLabel, label.IsShared(m.Mode))
if err == syscall.ENOTSUP {
if errors.Is(err, syscall.ENOTSUP) {
err = nil
}
if err != nil {

78
vendor/vendor.json vendored
View File

@@ -103,9 +103,9 @@
{"path":"github.com/coreos/pkg/dlopen","checksumSHA1":"O8c/VKtW34XPJNNlyeb/im8vWSI=","revision":"399ea9e2e55f791b6e3d920860dbecb99c3692f0","revisionTime":"2018-09-28T19:01:04Z"},
{"path":"github.com/cyphar/filepath-securejoin","checksumSHA1":"Ov+ja3hmONKxbhq9HAgK/vHSi/0=","revision":"7efe413b52e1bceaaee7efafebe396f9d648f258","revisionTime":"2019-02-05T14:40:30Z"},
{"path":"github.com/davecgh/go-spew/spew","checksumSHA1":"mrz/kicZiUaHxkyfvC/DyQcr8Do=","revision":"ecdeabc65495df2dec95d7c4a4c3e021903035e5","revisionTime":"2017-10-02T20:02:53Z"},
{"path":"github.com/docker/cli/cli/config/configfile","checksumSHA1":"7B3J+qGjLaXOfpdpBqP2jlye8EA=","revision":"eb310fca49568dccd87c6136f774ef6fff2a1b51","revisionTime":"2020-03-03T21:59:52Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/cli/cli/config/credentials","checksumSHA1":"2k151rs1rXrCrv3TK6GugXAd2h0=","revision":"eb310fca49568dccd87c6136f774ef6fff2a1b51","revisionTime":"2020-03-03T21:59:52Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/cli/cli/config/types","checksumSHA1":"zNiAwPvs7/RpI1cIw25lNhqLAsI=","revision":"eb310fca49568dccd87c6136f774ef6fff2a1b51","revisionTime":"2020-03-03T21:59:52Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/cli/cli/config/configfile","checksumSHA1":"7B3J+qGjLaXOfpdpBqP2jlye8EA=","revision":"dd360c7c0de8d9132a3965db6a59d3ae74f43ba7","revisionTime":"2020-05-28T20:41:25Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/cli/cli/config/credentials","checksumSHA1":"2k151rs1rXrCrv3TK6GugXAd2h0=","revision":"dd360c7c0de8d9132a3965db6a59d3ae74f43ba7","revisionTime":"2020-05-28T20:41:25Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/cli/cli/config/types","checksumSHA1":"zNiAwPvs7/RpI1cIw25lNhqLAsI=","revision":"dd360c7c0de8d9132a3965db6a59d3ae74f43ba7","revisionTime":"2020-05-28T20:41:25Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/distribution","checksumSHA1":"psKi0a/rSOz06B9gl1BtfJrkEFE=","revision":"2461543d988979529609e8cb6fca9ca190dc48da","revisionTime":"2019-01-17T23:19:26Z","version":"v2.7.1","versionExact":"v2.7.1"},
{"path":"github.com/docker/distribution/digestset","checksumSHA1":"Gj+xR1VgFKKmFXYOJMnAczC3Znk=","revision":"2461543d988979529609e8cb6fca9ca190dc48da","revisionTime":"2019-01-17T23:19:26Z","version":"v2.7.1","versionExact":"v2.7.1"},
{"path":"github.com/docker/distribution/metrics","checksumSHA1":"yqCaL8oUi3OlR/Mr4oHB5HKpstc=","revision":"2461543d988979529609e8cb6fca9ca190dc48da","revisionTime":"2019-01-17T23:19:26Z","version":"v2.7.1","versionExact":"v2.7.1"},
@@ -118,42 +118,42 @@
{"path":"github.com/docker/distribution/registry/client/transport","checksumSHA1":"1szQ+rzgdIP2Gb00Y3DJiEdwULE=","revision":"2461543d988979529609e8cb6fca9ca190dc48da","revisionTime":"2019-01-17T23:19:26Z","version":"v2.7.1","versionExact":"v2.7.1"},
{"path":"github.com/docker/distribution/registry/storage/cache","checksumSHA1":"RjRJSz/ISJEi0uWh5FlXMQetRcg=","revision":"2461543d988979529609e8cb6fca9ca190dc48da","revisionTime":"2019-01-17T23:19:26Z","version":"v2.7.1","versionExact":"v2.7.1"},
{"path":"github.com/docker/distribution/registry/storage/cache/memory","checksumSHA1":"T8G3A63WALmJ3JT/A0r01LG4KI0=","revision":"2461543d988979529609e8cb6fca9ca190dc48da","revisionTime":"2019-01-17T23:19:26Z","version":"v2.7.1","versionExact":"v2.7.1"},
{"path":"github.com/docker/docker-credential-helpers/client","checksumSHA1":"zcDmNPSzI1wVokOiHis5+JSg2Rk=","revision":"73e5f5dbfea31ee3b81111ebbf189785fa69731c","revisionTime":"2018-07-19T07:47:51Z"},
{"path":"github.com/docker/docker-credential-helpers/credentials","checksumSHA1":"4u6EMQqD1zIqOHp76zQFLVH5V8U=","revision":"73e5f5dbfea31ee3b81111ebbf189785fa69731c","revisionTime":"2018-07-19T07:47:51Z"},
{"path":"github.com/docker/docker/api/types","checksumSHA1":"mFZrlxHiQuq52BGccWNl/bO1GN0=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/api/types/blkiodev","checksumSHA1":"/jF0HVFiLzUUuywSjp4F/piM7BM=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/api/types/container","checksumSHA1":"rBGoI39KB5EQNaYMa3atjIa2LcY=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/api/types/filters","checksumSHA1":"XcXpxlu8Ewt+vbVjZuMnDXG/Z8M=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/api/types/mount","checksumSHA1":"9OClWW7OCikgz4QCS/sAVcvqcWk=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/api/types/network","checksumSHA1":"00k6FhkdRZ+TEiPPsUPAY594bCw=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/api/types/registry","checksumSHA1":"m4Jg5WnW75I65nvkEno8PElSXik=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/api/types/strslice","checksumSHA1":"OQEUS/2J2xVHpfvcsxcXzYqBSeY=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/api/types/swarm","checksumSHA1":"lyByEOaPKxCLcBvrXmt3VRw1PAI=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/api/types/swarm/runtime","checksumSHA1":"txs5EKTbKgVyKmKKSnaH3fr+odA=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/api/types/versions","checksumSHA1":"MZsgRjJJ0D/gAsXfKiEys+op6dE=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/errdefs","checksumSHA1":"q4R77xtScr+W3m77Otw6kr34ktg=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/oci/caps","checksumSHA1":"xUqupdS1MfBMyhwTDQGjxOq/Bug=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/opts","checksumSHA1":"dFf9rWD7Ous9YKO0udunqNZEaXw=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/pkg/archive","checksumSHA1":"5wQPoJpF2m/KdjwOsfMVqaPhYl0=","revision":"7f8b4b621b5d24b08af8fc8a2ae2a9607ba2fa43","revisionTime":"2020-03-30T12:13:34Z","version":"master","versionExact":"master"},
{"path":"github.com/docker/docker/pkg/fileutils","checksumSHA1":"eMoRb/diYeuYLojU7ChN5DaETHc=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/pkg/homedir","checksumSHA1":"CvnZ3L6NW0w2xjBZ1eadE9WElyg=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/pkg/idtools","checksumSHA1":"K9OcyoMKNt/w7u4FzhegR1rjnz8=","revision":"7f8b4b621b5d24b08af8fc8a2ae2a9607ba2fa43","revisionTime":"2020-03-30T12:13:34Z","version":"master","versionExact":"master"},
{"path":"github.com/docker/docker/pkg/ioutils","checksumSHA1":"Ybq78CnAoQWVBk+lkh3zykmcSjs=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/pkg/jsonmessage","checksumSHA1":"xX1+9qXSGHg3P/SllPGeAAhlBcE=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/pkg/longpath","checksumSHA1":"EXiIm2xIL7Ds+YsQUx8Z3eUYPtI=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/pkg/mount","checksumSHA1":"XOYKj6VqVoOcxWM0DD+Vu2ptJz4=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/pkg/pools","checksumSHA1":"dj8atalGWftfM9vdzCsh9YF1Seg=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/pkg/stdcopy","checksumSHA1":"w0waeTRJ1sFygI0dZXH6l9E1c60=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/pkg/stringid","checksumSHA1":"THVhMDu12TT7TpGJkazOSxQhmRs=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/pkg/system","checksumSHA1":"oh3sJYwwHBwqdIqhjK2jwxgrD+I=","comment":"pick up https://github.com/moby/moby/pull/40021","revision":"7f8b4b621b5d24b08af8fc8a2ae2a9607ba2fa43","revisionTime":"2020-03-30T12:13:34Z","version":"master","versionExact":"master"},
{"path":"github.com/docker/docker/pkg/tarsum","checksumSHA1":"I6mTgOFa7NeZpYw2S5342eenRLY=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/pkg/term","checksumSHA1":"GFsDxJkQz407/2nUBmWuafG+uF8=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/pkg/term/windows","checksumSHA1":"TeOtxuBbbZtp6wDK/t4DdaGGSC0=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/registry","checksumSHA1":"su5cICFANqJpcZnKUtD457fVtqc=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/registry/resumable","checksumSHA1":"jH7uQnDehFQygPP3zLC/mLSqgOk=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/rootless","checksumSHA1":"NgEtGryOwSLJ6QRlMwNcDLp1zIM=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/volume","checksumSHA1":"Bs344j8rU7oCQyIcIhO9FJyk3ts=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker/volume/mounts","checksumSHA1":"PNKeHho5s98kfdQAd+3+3442luU=","revision":"aa6a9891b09cce3d9004121294301a30d45d998d","revisionTime":"2020-01-17T19:55:42Z","version":"v19.03.8","versionExact":"v19.03.8"},
{"path":"github.com/docker/docker-credential-helpers/client","checksumSHA1":"zcDmNPSzI1wVokOiHis5+JSg2Rk=","revision":"73e5f5dbfea31ee3b81111ebbf189785fa69731c","revisionTime":"2018-07-19T07:47:51Z","version":"v19.03.10"},
{"path":"github.com/docker/docker-credential-helpers/credentials","checksumSHA1":"4u6EMQqD1zIqOHp76zQFLVH5V8U=","revision":"73e5f5dbfea31ee3b81111ebbf189785fa69731c","revisionTime":"2018-07-19T07:47:51Z","version":"v19.03.10"},
{"path":"github.com/docker/docker/api/types","checksumSHA1":"mFZrlxHiQuq52BGccWNl/bO1GN0=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/api/types/blkiodev","checksumSHA1":"/jF0HVFiLzUUuywSjp4F/piM7BM=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/api/types/container","checksumSHA1":"rBGoI39KB5EQNaYMa3atjIa2LcY=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/api/types/filters","checksumSHA1":"XcXpxlu8Ewt+vbVjZuMnDXG/Z8M=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/api/types/mount","checksumSHA1":"9OClWW7OCikgz4QCS/sAVcvqcWk=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/api/types/network","checksumSHA1":"00k6FhkdRZ+TEiPPsUPAY594bCw=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/api/types/registry","checksumSHA1":"m4Jg5WnW75I65nvkEno8PElSXik=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/api/types/strslice","checksumSHA1":"OQEUS/2J2xVHpfvcsxcXzYqBSeY=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/api/types/swarm","checksumSHA1":"lyByEOaPKxCLcBvrXmt3VRw1PAI=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/api/types/swarm/runtime","checksumSHA1":"txs5EKTbKgVyKmKKSnaH3fr+odA=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/api/types/versions","checksumSHA1":"MZsgRjJJ0D/gAsXfKiEys+op6dE=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/errdefs","checksumSHA1":"q4R77xtScr+W3m77Otw6kr34ktg=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/oci/caps","checksumSHA1":"xUqupdS1MfBMyhwTDQGjxOq/Bug=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/opts","checksumSHA1":"dFf9rWD7Ous9YKO0udunqNZEaXw=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/pkg/archive","checksumSHA1":"T/7vOtFlIEhq2Z25ZUKVn3t0/QM=","revision":"d1d5f6476656c6aad457e2a91d3436e66b6f2251","revisionTime":"2019-11-21T16:57:22Z"},
{"path":"github.com/docker/docker/pkg/fileutils","checksumSHA1":"eMoRb/diYeuYLojU7ChN5DaETHc=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/pkg/homedir","checksumSHA1":"CvnZ3L6NW0w2xjBZ1eadE9WElyg=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/pkg/idtools","checksumSHA1":"AQMgxP9+ialZokho+fwCquvQmUA=","revision":"d1d5f6476656c6aad457e2a91d3436e66b6f2251","revisionTime":"2019-11-21T16:57:22Z"},
{"path":"github.com/docker/docker/pkg/ioutils","checksumSHA1":"Ybq78CnAoQWVBk+lkh3zykmcSjs=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/pkg/jsonmessage","checksumSHA1":"xX1+9qXSGHg3P/SllPGeAAhlBcE=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/pkg/longpath","checksumSHA1":"EXiIm2xIL7Ds+YsQUx8Z3eUYPtI=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/pkg/mount","checksumSHA1":"XOYKj6VqVoOcxWM0DD+Vu2ptJz4=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/pkg/pools","checksumSHA1":"dj8atalGWftfM9vdzCsh9YF1Seg=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/pkg/stdcopy","checksumSHA1":"w0waeTRJ1sFygI0dZXH6l9E1c60=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/pkg/stringid","checksumSHA1":"THVhMDu12TT7TpGJkazOSxQhmRs=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/pkg/system","checksumSHA1":"BvC+33jlys4749eHrtObKcoIY08=","revision":"d1d5f6476656c6aad457e2a91d3436e66b6f2251","revisionTime":"2019-11-21T16:57:22Z"},
{"path":"github.com/docker/docker/pkg/tarsum","checksumSHA1":"I6mTgOFa7NeZpYw2S5342eenRLY=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/pkg/term","checksumSHA1":"GFsDxJkQz407/2nUBmWuafG+uF8=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/pkg/term/windows","checksumSHA1":"TeOtxuBbbZtp6wDK/t4DdaGGSC0=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/registry","checksumSHA1":"su5cICFANqJpcZnKUtD457fVtqc=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/registry/resumable","checksumSHA1":"jH7uQnDehFQygPP3zLC/mLSqgOk=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/rootless","checksumSHA1":"NgEtGryOwSLJ6QRlMwNcDLp1zIM=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/volume","checksumSHA1":"Bs344j8rU7oCQyIcIhO9FJyk3ts=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/docker/volume/mounts","checksumSHA1":"KDvRGkHaaBL5Ri6zEu4ugfvXUQA=","revision":"b47e74255811b2ead92b22254174c27ae9d6c9f4","revisionTime":"2020-05-28T18:23:17Z","version":"v19.03.10","versionExact":"v19.03.10"},
{"path":"github.com/docker/go-connections/nat","checksumSHA1":"1IPGX6/BnX7QN4DjbBk0UafTB2U=","revision":"7395e3f8aa162843a74ed6d48e79627d9792ac55","revisionTime":"2018-02-28T14:10:15Z","version":"v0.4.0","versionExact":"v0.4.0"},
{"path":"github.com/docker/go-connections/sockets","checksumSHA1":"jUfDG3VQsA2UZHvvIXncgiddpYA=","revision":"7395e3f8aa162843a74ed6d48e79627d9792ac55","revisionTime":"2018-02-28T14:10:15Z","version":"v0.4.0","versionExact":"v0.4.0"},
{"path":"github.com/docker/go-connections/tlsconfig","checksumSHA1":"KGILLnJybU/+xWJu8rgM4CpYT2M=","revision":"7395e3f8aa162843a74ed6d48e79627d9792ac55","revisionTime":"2018-02-28T14:10:15Z","version":"v0.4.0","versionExact":"v0.4.0"},