Merge pull request #5703 from thaJeztah/bump_engine
vendor: github.com/docker/docker ad6929339acd (master, v28.0.0-dev)
This commit is contained in:
commit
45648e8e0e
@ -1 +1 @@
|
|||||||
{"ID":"EKHL:QDUU:QZ7U:MKGD:VDXK:S27Q:GIPU:24B7:R7VT:DGN6:QCSF:2UBX","Containers":0,"ContainersRunning":0,"ContainersPaused":0,"ContainersStopped":0,"Images":0,"Driver":"overlay2","DriverStatus":[["Backing Filesystem","extfs"],["Supports d_type","true"],["Using metacopy","false"],["Native Overlay Diff","true"]],"Plugins":{"Volume":["local"],"Network":["bridge","host","macvlan","null","overlay"],"Authorization":null,"Log":["awslogs","fluentd","gcplogs","gelf","journald","json-file","splunk","syslog"]},"MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"PidsLimit":false,"IPv4Forwarding":true,"BridgeNfIptables":false,"BridgeNfIp6tables":false,"Debug":true,"NFd":33,"OomKillDisable":true,"NGoroutines":135,"SystemTime":"2017-08-24T17:44:34.077811894Z","LoggingDriver":"json-file","CgroupDriver":"cgroupfs","NEventsListener":0,"KernelVersion":"4.4.0-87-generic","OperatingSystem":"Ubuntu 16.04.3 LTS","OSVersion":"","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","RegistryConfig":{"AllowNondistributableArtifactsCIDRs":null,"AllowNondistributableArtifactsHostnames":null,"InsecureRegistryCIDRs":["127.0.0.0/8"],"IndexConfigs":{"docker.io":{"Name":"docker.io","Mirrors":null,"Secure":true,"Official":true}},"Mirrors":null},"NCPU":2,"MemTotal":2097356800,"GenericResources":null,"DockerRootDir":"/var/lib/docker","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name":"system-sample","Labels":["provider=digitalocean"],"ExperimentalBuild":false,"ServerVersion":"17.06.1-ce","Runtimes":{"runc":{"path":"docker-runc"}},"DefaultRuntime":"runc","Swarm":{"NodeID":"","NodeAddr":"","LocalNodeState":"inactive","ControlAvailable":false,"Error":"","RemoteManagers":null},"LiveRestoreEnabled":false,"Isolation":"","InitBinary":"docker-init","ContainerdCommit":{"ID":"6e23458c129b551d5c9871e5174f6b1b7f6d1170","Expected":"6e23458c129b551d5c9871e5174f6b1b7f6d1170"},"RuncCommit":{"ID":"810190ceaa507aa2727d7ae6f4790c76ec150bd2","Expected":"810190ceaa507aa2727d7ae6f4790c76ec150bd2"},"InitCommit":{"ID":"949e6fa","Expected":"949e6fa"},"SecurityOptions":["foo="],"DefaultAddressPools":[{"Base":"10.123.0.0/16","Size":24}],"CDISpecDirs":["/etc/cdi","/var/run/cdi"],"Warnings":null,"ServerErrors":["a server error occurred"],"ClientInfo":{"Debug":false,"Context":"","Plugins":[],"Warnings":null}}
|
{"ID":"EKHL:QDUU:QZ7U:MKGD:VDXK:S27Q:GIPU:24B7:R7VT:DGN6:QCSF:2UBX","Containers":0,"ContainersRunning":0,"ContainersPaused":0,"ContainersStopped":0,"Images":0,"Driver":"overlay2","DriverStatus":[["Backing Filesystem","extfs"],["Supports d_type","true"],["Using metacopy","false"],["Native Overlay Diff","true"]],"Plugins":{"Volume":["local"],"Network":["bridge","host","macvlan","null","overlay"],"Authorization":null,"Log":["awslogs","fluentd","gcplogs","gelf","journald","json-file","splunk","syslog"]},"MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"PidsLimit":false,"IPv4Forwarding":true,"BridgeNfIptables":false,"BridgeNfIp6tables":false,"Debug":true,"NFd":33,"OomKillDisable":true,"NGoroutines":135,"SystemTime":"2017-08-24T17:44:34.077811894Z","LoggingDriver":"json-file","CgroupDriver":"cgroupfs","NEventsListener":0,"KernelVersion":"4.4.0-87-generic","OperatingSystem":"Ubuntu 16.04.3 LTS","OSVersion":"","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","RegistryConfig":{"IndexConfigs":{"docker.io":{"Name":"docker.io","Mirrors":null,"Secure":true,"Official":true}},"InsecureRegistryCIDRs":["127.0.0.0/8"],"Mirrors":null},"NCPU":2,"MemTotal":2097356800,"GenericResources":null,"DockerRootDir":"/var/lib/docker","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name":"system-sample","Labels":["provider=digitalocean"],"ExperimentalBuild":false,"ServerVersion":"17.06.1-ce","Runtimes":{"runc":{"path":"docker-runc"}},"DefaultRuntime":"runc","Swarm":{"NodeID":"","NodeAddr":"","LocalNodeState":"inactive","ControlAvailable":false,"Error":"","RemoteManagers":null},"LiveRestoreEnabled":false,"Isolation":"","InitBinary":"docker-init","ContainerdCommit":{"ID":"6e23458c129b551d5c9871e5174f6b1b7f6d1170","Expected":"6e23458c129b551d5c9871e5174f6b1b7f6d1170"},"RuncCommit":{"ID":"810190ceaa507aa2727d7ae6f4790c76ec150bd2","Expected":"810190ceaa507aa2727d7ae6f4790c76ec150bd2"},"InitCommit":{"ID":"949e6fa","Expected":"949e6fa"},"SecurityOptions":["foo="],"DefaultAddressPools":[{"Base":"10.123.0.0/16","Size":24}],"CDISpecDirs":["/etc/cdi","/var/run/cdi"],"Warnings":null,"ServerErrors":["a server error occurred"],"ClientInfo":{"Debug":false,"Context":"","Plugins":[],"Warnings":null}}
|
||||||
|
@ -1 +1 @@
|
|||||||
{"ID":"EKHL:QDUU:QZ7U:MKGD:VDXK:S27Q:GIPU:24B7:R7VT:DGN6:QCSF:2UBX","Containers":0,"ContainersRunning":0,"ContainersPaused":0,"ContainersStopped":0,"Images":0,"Driver":"overlay2","DriverStatus":[["Backing Filesystem","extfs"],["Supports d_type","true"],["Using metacopy","false"],["Native Overlay Diff","true"]],"Plugins":{"Volume":["local"],"Network":["bridge","host","macvlan","null","overlay"],"Authorization":null,"Log":["awslogs","fluentd","gcplogs","gelf","journald","json-file","splunk","syslog"]},"MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"PidsLimit":false,"IPv4Forwarding":true,"BridgeNfIptables":false,"BridgeNfIp6tables":false,"Debug":true,"NFd":33,"OomKillDisable":true,"NGoroutines":135,"SystemTime":"2017-08-24T17:44:34.077811894Z","LoggingDriver":"json-file","CgroupDriver":"cgroupfs","NEventsListener":0,"KernelVersion":"4.4.0-87-generic","OperatingSystem":"Ubuntu 16.04.3 LTS","OSVersion":"","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","RegistryConfig":{"AllowNondistributableArtifactsCIDRs":null,"AllowNondistributableArtifactsHostnames":null,"InsecureRegistryCIDRs":["127.0.0.0/8"],"IndexConfigs":{"docker.io":{"Name":"docker.io","Mirrors":null,"Secure":true,"Official":true}},"Mirrors":null},"NCPU":2,"MemTotal":2097356800,"GenericResources":null,"DockerRootDir":"/var/lib/docker","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name":"system-sample","Labels":["provider=digitalocean"],"ExperimentalBuild":false,"ServerVersion":"17.06.1-ce","Runtimes":{"runc":{"path":"docker-runc"}},"DefaultRuntime":"runc","Swarm":{"NodeID":"","NodeAddr":"","LocalNodeState":"inactive","ControlAvailable":false,"Error":"","RemoteManagers":null},"LiveRestoreEnabled":false,"Isolation":"","InitBinary":"docker-init","ContainerdCommit":{"ID":"6e23458c129b551d5c9871e5174f6b1b7f6d1170","Expected":"6e23458c129b551d5c9871e5174f6b1b7f6d1170"},"RuncCommit":{"ID":"810190ceaa507aa2727d7ae6f4790c76ec150bd2","Expected":"810190ceaa507aa2727d7ae6f4790c76ec150bd2"},"InitCommit":{"ID":"949e6fa","Expected":"949e6fa"},"SecurityOptions":["name=apparmor","name=seccomp,profile=default"],"DefaultAddressPools":[{"Base":"10.123.0.0/16","Size":24}],"CDISpecDirs":["/etc/cdi","/var/run/cdi"],"Warnings":["WARNING: No memory limit support","WARNING: No swap limit support","WARNING: No oom kill disable support","WARNING: No cpu cfs quota support","WARNING: No cpu cfs period support","WARNING: No cpu shares support","WARNING: No cpuset support","WARNING: IPv4 forwarding is disabled"],"ClientInfo":{"Debug":true,"Platform":{"Name":"Docker Engine - Community"},"Version":"24.0.0","Context":"default","Plugins":[],"Warnings":null}}
|
{"ID":"EKHL:QDUU:QZ7U:MKGD:VDXK:S27Q:GIPU:24B7:R7VT:DGN6:QCSF:2UBX","Containers":0,"ContainersRunning":0,"ContainersPaused":0,"ContainersStopped":0,"Images":0,"Driver":"overlay2","DriverStatus":[["Backing Filesystem","extfs"],["Supports d_type","true"],["Using metacopy","false"],["Native Overlay Diff","true"]],"Plugins":{"Volume":["local"],"Network":["bridge","host","macvlan","null","overlay"],"Authorization":null,"Log":["awslogs","fluentd","gcplogs","gelf","journald","json-file","splunk","syslog"]},"MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"PidsLimit":false,"IPv4Forwarding":true,"BridgeNfIptables":false,"BridgeNfIp6tables":false,"Debug":true,"NFd":33,"OomKillDisable":true,"NGoroutines":135,"SystemTime":"2017-08-24T17:44:34.077811894Z","LoggingDriver":"json-file","CgroupDriver":"cgroupfs","NEventsListener":0,"KernelVersion":"4.4.0-87-generic","OperatingSystem":"Ubuntu 16.04.3 LTS","OSVersion":"","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","RegistryConfig":{"IndexConfigs":{"docker.io":{"Name":"docker.io","Mirrors":null,"Secure":true,"Official":true}},"InsecureRegistryCIDRs":["127.0.0.0/8"],"Mirrors":null},"NCPU":2,"MemTotal":2097356800,"GenericResources":null,"DockerRootDir":"/var/lib/docker","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name":"system-sample","Labels":["provider=digitalocean"],"ExperimentalBuild":false,"ServerVersion":"17.06.1-ce","Runtimes":{"runc":{"path":"docker-runc"}},"DefaultRuntime":"runc","Swarm":{"NodeID":"","NodeAddr":"","LocalNodeState":"inactive","ControlAvailable":false,"Error":"","RemoteManagers":null},"LiveRestoreEnabled":false,"Isolation":"","InitBinary":"docker-init","ContainerdCommit":{"ID":"6e23458c129b551d5c9871e5174f6b1b7f6d1170","Expected":"6e23458c129b551d5c9871e5174f6b1b7f6d1170"},"RuncCommit":{"ID":"810190ceaa507aa2727d7ae6f4790c76ec150bd2","Expected":"810190ceaa507aa2727d7ae6f4790c76ec150bd2"},"InitCommit":{"ID":"949e6fa","Expected":"949e6fa"},"SecurityOptions":["name=apparmor","name=seccomp,profile=default"],"DefaultAddressPools":[{"Base":"10.123.0.0/16","Size":24}],"CDISpecDirs":["/etc/cdi","/var/run/cdi"],"Warnings":["WARNING: No memory limit support","WARNING: No swap limit support","WARNING: No oom kill disable support","WARNING: No cpu cfs quota support","WARNING: No cpu cfs period support","WARNING: No cpu shares support","WARNING: No cpuset support","WARNING: IPv4 forwarding is disabled"],"ClientInfo":{"Debug":true,"Platform":{"Name":"Docker Engine - Community"},"Version":"24.0.0","Context":"default","Plugins":[],"Warnings":null}}
|
||||||
|
@ -1 +1 @@
|
|||||||
{"ID":"EKHL:QDUU:QZ7U:MKGD:VDXK:S27Q:GIPU:24B7:R7VT:DGN6:QCSF:2UBX","Containers":0,"ContainersRunning":0,"ContainersPaused":0,"ContainersStopped":0,"Images":0,"Driver":"overlay2","DriverStatus":[["Backing Filesystem","extfs"],["Supports d_type","true"],["Using metacopy","false"],["Native Overlay Diff","true"]],"Plugins":{"Volume":["local"],"Network":["bridge","host","macvlan","null","overlay"],"Authorization":null,"Log":["awslogs","fluentd","gcplogs","gelf","journald","json-file","splunk","syslog"]},"MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"PidsLimit":false,"IPv4Forwarding":true,"BridgeNfIptables":false,"BridgeNfIp6tables":false,"Debug":true,"NFd":33,"OomKillDisable":true,"NGoroutines":135,"SystemTime":"2017-08-24T17:44:34.077811894Z","LoggingDriver":"json-file","CgroupDriver":"cgroupfs","NEventsListener":0,"KernelVersion":"4.4.0-87-generic","OperatingSystem":"Ubuntu 16.04.3 LTS","OSVersion":"","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","RegistryConfig":{"AllowNondistributableArtifactsCIDRs":null,"AllowNondistributableArtifactsHostnames":null,"InsecureRegistryCIDRs":["127.0.0.0/8"],"IndexConfigs":{"docker.io":{"Name":"docker.io","Mirrors":null,"Secure":true,"Official":true}},"Mirrors":null},"NCPU":2,"MemTotal":2097356800,"GenericResources":null,"DockerRootDir":"/var/lib/docker","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name":"system-sample","Labels":["provider=digitalocean"],"ExperimentalBuild":false,"ServerVersion":"17.06.1-ce","Runtimes":{"runc":{"path":"docker-runc"}},"DefaultRuntime":"runc","Swarm":{"NodeID":"","NodeAddr":"","LocalNodeState":"inactive","ControlAvailable":false,"Error":"","RemoteManagers":null},"LiveRestoreEnabled":false,"Isolation":"","InitBinary":"docker-init","ContainerdCommit":{"ID":"6e23458c129b551d5c9871e5174f6b1b7f6d1170","Expected":"6e23458c129b551d5c9871e5174f6b1b7f6d1170"},"RuncCommit":{"ID":"810190ceaa507aa2727d7ae6f4790c76ec150bd2","Expected":"810190ceaa507aa2727d7ae6f4790c76ec150bd2"},"InitCommit":{"ID":"949e6fa","Expected":"949e6fa"},"SecurityOptions":["name=apparmor","name=seccomp,profile=default"],"DefaultAddressPools":[{"Base":"10.123.0.0/16","Size":24}],"CDISpecDirs":["/etc/cdi","/var/run/cdi"],"Warnings":null,"ClientInfo":{"Debug":true,"Platform":{"Name":"Docker Engine - Community"},"Version":"24.0.0","Context":"default","Plugins":[],"Warnings":null}}
|
{"ID":"EKHL:QDUU:QZ7U:MKGD:VDXK:S27Q:GIPU:24B7:R7VT:DGN6:QCSF:2UBX","Containers":0,"ContainersRunning":0,"ContainersPaused":0,"ContainersStopped":0,"Images":0,"Driver":"overlay2","DriverStatus":[["Backing Filesystem","extfs"],["Supports d_type","true"],["Using metacopy","false"],["Native Overlay Diff","true"]],"Plugins":{"Volume":["local"],"Network":["bridge","host","macvlan","null","overlay"],"Authorization":null,"Log":["awslogs","fluentd","gcplogs","gelf","journald","json-file","splunk","syslog"]},"MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"PidsLimit":false,"IPv4Forwarding":true,"BridgeNfIptables":false,"BridgeNfIp6tables":false,"Debug":true,"NFd":33,"OomKillDisable":true,"NGoroutines":135,"SystemTime":"2017-08-24T17:44:34.077811894Z","LoggingDriver":"json-file","CgroupDriver":"cgroupfs","NEventsListener":0,"KernelVersion":"4.4.0-87-generic","OperatingSystem":"Ubuntu 16.04.3 LTS","OSVersion":"","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","RegistryConfig":{"IndexConfigs":{"docker.io":{"Name":"docker.io","Mirrors":null,"Secure":true,"Official":true}},"InsecureRegistryCIDRs":["127.0.0.0/8"],"Mirrors":null},"NCPU":2,"MemTotal":2097356800,"GenericResources":null,"DockerRootDir":"/var/lib/docker","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name":"system-sample","Labels":["provider=digitalocean"],"ExperimentalBuild":false,"ServerVersion":"17.06.1-ce","Runtimes":{"runc":{"path":"docker-runc"}},"DefaultRuntime":"runc","Swarm":{"NodeID":"","NodeAddr":"","LocalNodeState":"inactive","ControlAvailable":false,"Error":"","RemoteManagers":null},"LiveRestoreEnabled":false,"Isolation":"","InitBinary":"docker-init","ContainerdCommit":{"ID":"6e23458c129b551d5c9871e5174f6b1b7f6d1170","Expected":"6e23458c129b551d5c9871e5174f6b1b7f6d1170"},"RuncCommit":{"ID":"810190ceaa507aa2727d7ae6f4790c76ec150bd2","Expected":"810190ceaa507aa2727d7ae6f4790c76ec150bd2"},"InitCommit":{"ID":"949e6fa","Expected":"949e6fa"},"SecurityOptions":["name=apparmor","name=seccomp,profile=default"],"DefaultAddressPools":[{"Base":"10.123.0.0/16","Size":24}],"CDISpecDirs":["/etc/cdi","/var/run/cdi"],"Warnings":null,"ClientInfo":{"Debug":true,"Platform":{"Name":"Docker Engine - Community"},"Version":"24.0.0","Context":"default","Plugins":[],"Warnings":null}}
|
||||||
|
@ -1 +1 @@
|
|||||||
{"ID":"EKHL:QDUU:QZ7U:MKGD:VDXK:S27Q:GIPU:24B7:R7VT:DGN6:QCSF:2UBX","Containers":0,"ContainersRunning":0,"ContainersPaused":0,"ContainersStopped":0,"Images":0,"Driver":"overlay2","DriverStatus":[["Backing Filesystem","extfs"],["Supports d_type","true"],["Using metacopy","false"],["Native Overlay Diff","true"]],"Plugins":{"Volume":["local"],"Network":["bridge","host","macvlan","null","overlay"],"Authorization":null,"Log":["awslogs","fluentd","gcplogs","gelf","journald","json-file","splunk","syslog"]},"MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"PidsLimit":false,"IPv4Forwarding":true,"BridgeNfIptables":false,"BridgeNfIp6tables":false,"Debug":true,"NFd":33,"OomKillDisable":true,"NGoroutines":135,"SystemTime":"2017-08-24T17:44:34.077811894Z","LoggingDriver":"json-file","CgroupDriver":"cgroupfs","NEventsListener":0,"KernelVersion":"4.4.0-87-generic","OperatingSystem":"Ubuntu 16.04.3 LTS","OSVersion":"","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","RegistryConfig":{"AllowNondistributableArtifactsCIDRs":null,"AllowNondistributableArtifactsHostnames":null,"InsecureRegistryCIDRs":["127.0.0.0/8"],"IndexConfigs":{"docker.io":{"Name":"docker.io","Mirrors":null,"Secure":true,"Official":true}},"Mirrors":null},"NCPU":2,"MemTotal":2097356800,"GenericResources":null,"DockerRootDir":"/var/lib/docker","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name":"system-sample","Labels":["provider=digitalocean"],"ExperimentalBuild":false,"ServerVersion":"17.06.1-ce","Runtimes":{"runc":{"path":"docker-runc"}},"DefaultRuntime":"runc","Swarm":{"NodeID":"","NodeAddr":"","LocalNodeState":"inactive","ControlAvailable":false,"Error":"","RemoteManagers":null},"LiveRestoreEnabled":false,"Isolation":"","InitBinary":"docker-init","ContainerdCommit":{"ID":"6e23458c129b551d5c9871e5174f6b1b7f6d1170","Expected":"6e23458c129b551d5c9871e5174f6b1b7f6d1170"},"RuncCommit":{"ID":"810190ceaa507aa2727d7ae6f4790c76ec150bd2","Expected":"810190ceaa507aa2727d7ae6f4790c76ec150bd2"},"InitCommit":{"ID":"949e6fa","Expected":"949e6fa"},"SecurityOptions":["name=apparmor","name=seccomp,profile=default"],"DefaultAddressPools":[{"Base":"10.123.0.0/16","Size":24}],"CDISpecDirs":["/etc/cdi","/var/run/cdi"],"Warnings":null,"ClientInfo":{"Debug":false,"Context":"default","Plugins":[{"SchemaVersion":"0.1.0","Vendor":"ACME Corp","Version":"0.1.0","ShortDescription":"unit test is good","Name":"goodplugin","Path":"/path/to/docker-goodplugin"},{"SchemaVersion":"0.1.0","Vendor":"ACME Corp","ShortDescription":"this plugin has no version","Name":"unversionedplugin","Path":"/path/to/docker-unversionedplugin"},{"Name":"badplugin","Path":"/path/to/docker-badplugin","Err":"something wrong"}],"Warnings":null}}
|
{"ID":"EKHL:QDUU:QZ7U:MKGD:VDXK:S27Q:GIPU:24B7:R7VT:DGN6:QCSF:2UBX","Containers":0,"ContainersRunning":0,"ContainersPaused":0,"ContainersStopped":0,"Images":0,"Driver":"overlay2","DriverStatus":[["Backing Filesystem","extfs"],["Supports d_type","true"],["Using metacopy","false"],["Native Overlay Diff","true"]],"Plugins":{"Volume":["local"],"Network":["bridge","host","macvlan","null","overlay"],"Authorization":null,"Log":["awslogs","fluentd","gcplogs","gelf","journald","json-file","splunk","syslog"]},"MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"PidsLimit":false,"IPv4Forwarding":true,"BridgeNfIptables":false,"BridgeNfIp6tables":false,"Debug":true,"NFd":33,"OomKillDisable":true,"NGoroutines":135,"SystemTime":"2017-08-24T17:44:34.077811894Z","LoggingDriver":"json-file","CgroupDriver":"cgroupfs","NEventsListener":0,"KernelVersion":"4.4.0-87-generic","OperatingSystem":"Ubuntu 16.04.3 LTS","OSVersion":"","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","RegistryConfig":{"IndexConfigs":{"docker.io":{"Name":"docker.io","Mirrors":null,"Secure":true,"Official":true}},"InsecureRegistryCIDRs":["127.0.0.0/8"],"Mirrors":null},"NCPU":2,"MemTotal":2097356800,"GenericResources":null,"DockerRootDir":"/var/lib/docker","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name":"system-sample","Labels":["provider=digitalocean"],"ExperimentalBuild":false,"ServerVersion":"17.06.1-ce","Runtimes":{"runc":{"path":"docker-runc"}},"DefaultRuntime":"runc","Swarm":{"NodeID":"","NodeAddr":"","LocalNodeState":"inactive","ControlAvailable":false,"Error":"","RemoteManagers":null},"LiveRestoreEnabled":false,"Isolation":"","InitBinary":"docker-init","ContainerdCommit":{"ID":"6e23458c129b551d5c9871e5174f6b1b7f6d1170","Expected":"6e23458c129b551d5c9871e5174f6b1b7f6d1170"},"RuncCommit":{"ID":"810190ceaa507aa2727d7ae6f4790c76ec150bd2","Expected":"810190ceaa507aa2727d7ae6f4790c76ec150bd2"},"InitCommit":{"ID":"949e6fa","Expected":"949e6fa"},"SecurityOptions":["name=apparmor","name=seccomp,profile=default"],"DefaultAddressPools":[{"Base":"10.123.0.0/16","Size":24}],"CDISpecDirs":["/etc/cdi","/var/run/cdi"],"Warnings":null,"ClientInfo":{"Debug":false,"Context":"default","Plugins":[{"SchemaVersion":"0.1.0","Vendor":"ACME Corp","Version":"0.1.0","ShortDescription":"unit test is good","Name":"goodplugin","Path":"/path/to/docker-goodplugin"},{"SchemaVersion":"0.1.0","Vendor":"ACME Corp","ShortDescription":"this plugin has no version","Name":"unversionedplugin","Path":"/path/to/docker-unversionedplugin"},{"Name":"badplugin","Path":"/path/to/docker-badplugin","Err":"something wrong"}],"Warnings":null}}
|
||||||
|
@ -1 +1 @@
|
|||||||
{"ID":"EKHL:QDUU:QZ7U:MKGD:VDXK:S27Q:GIPU:24B7:R7VT:DGN6:QCSF:2UBX","Containers":0,"ContainersRunning":0,"ContainersPaused":0,"ContainersStopped":0,"Images":0,"Driver":"overlay2","DriverStatus":[["Backing Filesystem","extfs"],["Supports d_type","true"],["Using metacopy","false"],["Native Overlay Diff","true"]],"Plugins":{"Volume":["local"],"Network":["bridge","host","macvlan","null","overlay"],"Authorization":null,"Log":["awslogs","fluentd","gcplogs","gelf","journald","json-file","splunk","syslog"]},"MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"PidsLimit":false,"IPv4Forwarding":true,"BridgeNfIptables":false,"BridgeNfIp6tables":false,"Debug":true,"NFd":33,"OomKillDisable":true,"NGoroutines":135,"SystemTime":"2017-08-24T17:44:34.077811894Z","LoggingDriver":"json-file","CgroupDriver":"cgroupfs","NEventsListener":0,"KernelVersion":"4.4.0-87-generic","OperatingSystem":"Ubuntu 16.04.3 LTS","OSVersion":"","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","RegistryConfig":{"AllowNondistributableArtifactsCIDRs":null,"AllowNondistributableArtifactsHostnames":null,"InsecureRegistryCIDRs":["127.0.0.0/8"],"IndexConfigs":{"docker.io":{"Name":"docker.io","Mirrors":null,"Secure":true,"Official":true}},"Mirrors":null},"NCPU":2,"MemTotal":2097356800,"GenericResources":null,"DockerRootDir":"/var/lib/docker","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name":"system-sample","Labels":["provider=digitalocean"],"ExperimentalBuild":false,"ServerVersion":"17.06.1-ce","Runtimes":{"runc":{"path":"docker-runc"}},"DefaultRuntime":"runc","Swarm":{"NodeID":"qo2dfdig9mmxqkawulggepdih","NodeAddr":"165.227.107.89","LocalNodeState":"active","ControlAvailable":true,"Error":"","RemoteManagers":[{"NodeID":"qo2dfdig9mmxqkawulggepdih","Addr":"165.227.107.89:2377"}],"Nodes":1,"Managers":1,"Cluster":{"ID":"9vs5ygs0gguyyec4iqf2314c0","Version":{"Index":11},"CreatedAt":"2017-08-24T17:34:19.278062352Z","UpdatedAt":"2017-08-24T17:34:42.398815481Z","Spec":{"Name":"default","Labels":null,"Orchestration":{"TaskHistoryRetentionLimit":5},"Raft":{"SnapshotInterval":10000,"KeepOldSnapshots":0,"LogEntriesForSlowFollowers":500,"ElectionTick":3,"HeartbeatTick":1},"Dispatcher":{"HeartbeatPeriod":5000000000},"CAConfig":{"NodeCertExpiry":7776000000000000},"TaskDefaults":{},"EncryptionConfig":{"AutoLockManagers":true}},"TLSInfo":{"TrustRoot":"\n-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUaFCW5xsq8eyiJ+Pmcv3MCflMLnMwCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwODI0MTcyOTAwWhcNMzcwODE5MTcy\nOTAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABDy7NebyUJyUjWJDBUdnZoV6GBxEGKO4TZPNDwnxDxJcUdLVaB7WGa4/DLrW\nUfsVgh1JGik2VTiLuTMA1tLlNPOjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBQl16XFtaaXiUAwEuJptJlDjfKskDAKBggqhkjO\nPQQDAgNIADBFAiEAo9fTQNM5DP9bHVcTJYfl2Cay1bFu1E+lnpmN+EYJfeACIGKH\n1pCUkZ+D0IB6CiEZGWSHyLuXPM1rlP+I5KuS7sB8\n-----END CERTIFICATE-----\n","CertIssuerSubject":"MBMxETAPBgNVBAMTCHN3YXJtLWNh","CertIssuerPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPLs15vJQnJSNYkMFR2dmhXoYHEQYo7hNk80PCfEPElxR0tVoHtYZrj8MutZR+xWCHUkaKTZVOIu5MwDW0uU08w=="},"RootRotationInProgress":false,"DefaultAddrPool":null,"SubnetSize":0,"DataPathPort":0}},"LiveRestoreEnabled":false,"Isolation":"","InitBinary":"docker-init","ContainerdCommit":{"ID":"6e23458c129b551d5c9871e5174f6b1b7f6d1170","Expected":"6e23458c129b551d5c9871e5174f6b1b7f6d1170"},"RuncCommit":{"ID":"810190ceaa507aa2727d7ae6f4790c76ec150bd2","Expected":"810190ceaa507aa2727d7ae6f4790c76ec150bd2"},"InitCommit":{"ID":"949e6fa","Expected":"949e6fa"},"SecurityOptions":["name=apparmor","name=seccomp,profile=default"],"DefaultAddressPools":[{"Base":"10.123.0.0/16","Size":24}],"CDISpecDirs":["/etc/cdi","/var/run/cdi"],"Warnings":null,"ClientInfo":{"Debug":false,"Context":"default","Plugins":[],"Warnings":null}}
|
{"ID":"EKHL:QDUU:QZ7U:MKGD:VDXK:S27Q:GIPU:24B7:R7VT:DGN6:QCSF:2UBX","Containers":0,"ContainersRunning":0,"ContainersPaused":0,"ContainersStopped":0,"Images":0,"Driver":"overlay2","DriverStatus":[["Backing Filesystem","extfs"],["Supports d_type","true"],["Using metacopy","false"],["Native Overlay Diff","true"]],"Plugins":{"Volume":["local"],"Network":["bridge","host","macvlan","null","overlay"],"Authorization":null,"Log":["awslogs","fluentd","gcplogs","gelf","journald","json-file","splunk","syslog"]},"MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"PidsLimit":false,"IPv4Forwarding":true,"BridgeNfIptables":false,"BridgeNfIp6tables":false,"Debug":true,"NFd":33,"OomKillDisable":true,"NGoroutines":135,"SystemTime":"2017-08-24T17:44:34.077811894Z","LoggingDriver":"json-file","CgroupDriver":"cgroupfs","NEventsListener":0,"KernelVersion":"4.4.0-87-generic","OperatingSystem":"Ubuntu 16.04.3 LTS","OSVersion":"","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","RegistryConfig":{"IndexConfigs":{"docker.io":{"Name":"docker.io","Mirrors":null,"Secure":true,"Official":true}},"InsecureRegistryCIDRs":["127.0.0.0/8"],"Mirrors":null},"NCPU":2,"MemTotal":2097356800,"GenericResources":null,"DockerRootDir":"/var/lib/docker","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name":"system-sample","Labels":["provider=digitalocean"],"ExperimentalBuild":false,"ServerVersion":"17.06.1-ce","Runtimes":{"runc":{"path":"docker-runc"}},"DefaultRuntime":"runc","Swarm":{"NodeID":"qo2dfdig9mmxqkawulggepdih","NodeAddr":"165.227.107.89","LocalNodeState":"active","ControlAvailable":true,"Error":"","RemoteManagers":[{"NodeID":"qo2dfdig9mmxqkawulggepdih","Addr":"165.227.107.89:2377"}],"Nodes":1,"Managers":1,"Cluster":{"ID":"9vs5ygs0gguyyec4iqf2314c0","Version":{"Index":11},"CreatedAt":"2017-08-24T17:34:19.278062352Z","UpdatedAt":"2017-08-24T17:34:42.398815481Z","Spec":{"Name":"default","Labels":null,"Orchestration":{"TaskHistoryRetentionLimit":5},"Raft":{"SnapshotInterval":10000,"KeepOldSnapshots":0,"LogEntriesForSlowFollowers":500,"ElectionTick":3,"HeartbeatTick":1},"Dispatcher":{"HeartbeatPeriod":5000000000},"CAConfig":{"NodeCertExpiry":7776000000000000},"TaskDefaults":{},"EncryptionConfig":{"AutoLockManagers":true}},"TLSInfo":{"TrustRoot":"\n-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUaFCW5xsq8eyiJ+Pmcv3MCflMLnMwCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwODI0MTcyOTAwWhcNMzcwODE5MTcy\nOTAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABDy7NebyUJyUjWJDBUdnZoV6GBxEGKO4TZPNDwnxDxJcUdLVaB7WGa4/DLrW\nUfsVgh1JGik2VTiLuTMA1tLlNPOjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBQl16XFtaaXiUAwEuJptJlDjfKskDAKBggqhkjO\nPQQDAgNIADBFAiEAo9fTQNM5DP9bHVcTJYfl2Cay1bFu1E+lnpmN+EYJfeACIGKH\n1pCUkZ+D0IB6CiEZGWSHyLuXPM1rlP+I5KuS7sB8\n-----END CERTIFICATE-----\n","CertIssuerSubject":"MBMxETAPBgNVBAMTCHN3YXJtLWNh","CertIssuerPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPLs15vJQnJSNYkMFR2dmhXoYHEQYo7hNk80PCfEPElxR0tVoHtYZrj8MutZR+xWCHUkaKTZVOIu5MwDW0uU08w=="},"RootRotationInProgress":false,"DefaultAddrPool":null,"SubnetSize":0,"DataPathPort":0}},"LiveRestoreEnabled":false,"Isolation":"","InitBinary":"docker-init","ContainerdCommit":{"ID":"6e23458c129b551d5c9871e5174f6b1b7f6d1170","Expected":"6e23458c129b551d5c9871e5174f6b1b7f6d1170"},"RuncCommit":{"ID":"810190ceaa507aa2727d7ae6f4790c76ec150bd2","Expected":"810190ceaa507aa2727d7ae6f4790c76ec150bd2"},"InitCommit":{"ID":"949e6fa","Expected":"949e6fa"},"SecurityOptions":["name=apparmor","name=seccomp,profile=default"],"DefaultAddressPools":[{"Base":"10.123.0.0/16","Size":24}],"CDISpecDirs":["/etc/cdi","/var/run/cdi"],"Warnings":null,"ClientInfo":{"Debug":false,"Context":"default","Plugins":[],"Warnings":null}}
|
||||||
|
@ -13,7 +13,7 @@ require (
|
|||||||
github.com/distribution/reference v0.6.0
|
github.com/distribution/reference v0.6.0
|
||||||
github.com/docker/cli-docs-tool v0.8.0
|
github.com/docker/cli-docs-tool v0.8.0
|
||||||
github.com/docker/distribution v2.8.3+incompatible
|
github.com/docker/distribution v2.8.3+incompatible
|
||||||
github.com/docker/docker v27.0.2-0.20241209174241-b249c5ebd214+incompatible // master (v-next)
|
github.com/docker/docker v27.0.2-0.20241220121230-ad6929339acd+incompatible // master (v-next)
|
||||||
github.com/docker/docker-credential-helpers v0.8.2
|
github.com/docker/docker-credential-helpers v0.8.2
|
||||||
github.com/docker/go-connections v0.5.0
|
github.com/docker/go-connections v0.5.0
|
||||||
github.com/docker/go-units v0.5.0
|
github.com/docker/go-units v0.5.0
|
||||||
|
@ -51,8 +51,8 @@ github.com/docker/cli-docs-tool v0.8.0/go.mod h1:8TQQ3E7mOXoYUs811LiPdUnAhXrcVsB
|
|||||||
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
|
github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
|
||||||
github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/docker v27.0.2-0.20241209174241-b249c5ebd214+incompatible h1:n78wXsuD+b4ch68cGrR/SfpXPi4Q9T3jrBGIN5NEAtE=
|
github.com/docker/docker v27.0.2-0.20241220121230-ad6929339acd+incompatible h1:sQ4Qsqxsm87Q30YfleVm/Sb/Glf9VoQn+5g6Vl5XLXo=
|
||||||
github.com/docker/docker v27.0.2-0.20241209174241-b249c5ebd214+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v27.0.2-0.20241220121230-ad6929339acd+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo=
|
github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo=
|
||||||
github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M=
|
github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M=
|
||||||
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
|
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
|
||||||
|
77
vendor/github.com/docker/docker/api/swagger.yaml
generated
vendored
77
vendor/github.com/docker/docker/api/swagger.yaml
generated
vendored
@ -1195,6 +1195,7 @@ definitions:
|
|||||||
- "default"
|
- "default"
|
||||||
- "process"
|
- "process"
|
||||||
- "hyperv"
|
- "hyperv"
|
||||||
|
- ""
|
||||||
MaskedPaths:
|
MaskedPaths:
|
||||||
type: "array"
|
type: "array"
|
||||||
description: |
|
description: |
|
||||||
@ -4219,6 +4220,7 @@ definitions:
|
|||||||
- "default"
|
- "default"
|
||||||
- "process"
|
- "process"
|
||||||
- "hyperv"
|
- "hyperv"
|
||||||
|
- ""
|
||||||
Init:
|
Init:
|
||||||
description: |
|
description: |
|
||||||
Run an init inside the container that forwards signals and reaps
|
Run an init inside the container that forwards signals and reaps
|
||||||
@ -5546,13 +5548,28 @@ definitions:
|
|||||||
type: "boolean"
|
type: "boolean"
|
||||||
example: true
|
example: true
|
||||||
BridgeNfIptables:
|
BridgeNfIptables:
|
||||||
description: "Indicates if `bridge-nf-call-iptables` is available on the host."
|
description: |
|
||||||
|
Indicates if `bridge-nf-call-iptables` is available on the host when
|
||||||
|
the daemon was started.
|
||||||
|
|
||||||
|
<p><br /></p>
|
||||||
|
|
||||||
|
> **Deprecated**: netfilter module is now loaded on-demand and no longer
|
||||||
|
> during daemon startup, making this field obsolete. This field is always
|
||||||
|
> `false` and will be removed in a API v1.49.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
example: true
|
example: false
|
||||||
BridgeNfIp6tables:
|
BridgeNfIp6tables:
|
||||||
description: "Indicates if `bridge-nf-call-ip6tables` is available on the host."
|
description: |
|
||||||
|
Indicates if `bridge-nf-call-ip6tables` is available on the host.
|
||||||
|
|
||||||
|
<p><br /></p>
|
||||||
|
|
||||||
|
> **Deprecated**: netfilter module is now loaded on-demand, and no longer
|
||||||
|
> during daemon startup, making this field obsolete. This field is always
|
||||||
|
> `false` and will be removed in a API v1.49.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
example: true
|
example: false
|
||||||
Debug:
|
Debug:
|
||||||
description: |
|
description: |
|
||||||
Indicates if the daemon is running in debug-mode / with debug-level
|
Indicates if the daemon is running in debug-mode / with debug-level
|
||||||
@ -5789,6 +5806,7 @@ definitions:
|
|||||||
- "default"
|
- "default"
|
||||||
- "hyperv"
|
- "hyperv"
|
||||||
- "process"
|
- "process"
|
||||||
|
- ""
|
||||||
InitBinary:
|
InitBinary:
|
||||||
description: |
|
description: |
|
||||||
Name and, optional, path of the `docker-init` binary.
|
Name and, optional, path of the `docker-init` binary.
|
||||||
@ -5859,8 +5877,6 @@ definitions:
|
|||||||
type: "string"
|
type: "string"
|
||||||
example:
|
example:
|
||||||
- "WARNING: No memory limit support"
|
- "WARNING: No memory limit support"
|
||||||
- "WARNING: bridge-nf-call-iptables is disabled"
|
|
||||||
- "WARNING: bridge-nf-call-ip6tables is disabled"
|
|
||||||
CDISpecDirs:
|
CDISpecDirs:
|
||||||
description: |
|
description: |
|
||||||
List of directories where (Container Device Interface) CDI
|
List of directories where (Container Device Interface) CDI
|
||||||
@ -5983,55 +5999,27 @@ definitions:
|
|||||||
List of IP ranges to which nondistributable artifacts can be pushed,
|
List of IP ranges to which nondistributable artifacts can be pushed,
|
||||||
using the CIDR syntax [RFC 4632](https://tools.ietf.org/html/4632).
|
using the CIDR syntax [RFC 4632](https://tools.ietf.org/html/4632).
|
||||||
|
|
||||||
Some images (for example, Windows base images) contain artifacts
|
<p><br /></p>
|
||||||
whose distribution is restricted by license. When these images are
|
|
||||||
pushed to a registry, restricted artifacts are not included.
|
|
||||||
|
|
||||||
This configuration override this behavior, and enables the daemon to
|
|
||||||
push nondistributable artifacts to all registries whose resolved IP
|
|
||||||
address is within the subnet described by the CIDR syntax.
|
|
||||||
|
|
||||||
This option is useful when pushing images containing
|
|
||||||
nondistributable artifacts to a registry on an air-gapped network so
|
|
||||||
hosts on that network can pull the images without connecting to
|
|
||||||
another server.
|
|
||||||
|
|
||||||
> **Warning**: Nondistributable artifacts typically have restrictions
|
|
||||||
> on how and where they can be distributed and shared. Only use this
|
|
||||||
> feature to push artifacts to private registries and ensure that you
|
|
||||||
> are in compliance with any terms that cover redistributing
|
|
||||||
> nondistributable artifacts.
|
|
||||||
|
|
||||||
|
> **Deprecated**: Pushing nondistributable artifacts is now always enabled
|
||||||
|
> and this field is always `null`. This field will be removed in a API v1.49.
|
||||||
type: "array"
|
type: "array"
|
||||||
items:
|
items:
|
||||||
type: "string"
|
type: "string"
|
||||||
example: ["::1/128", "127.0.0.0/8"]
|
example: []
|
||||||
AllowNondistributableArtifactsHostnames:
|
AllowNondistributableArtifactsHostnames:
|
||||||
description: |
|
description: |
|
||||||
List of registry hostnames to which nondistributable artifacts can be
|
List of registry hostnames to which nondistributable artifacts can be
|
||||||
pushed, using the format `<hostname>[:<port>]` or `<IP address>[:<port>]`.
|
pushed, using the format `<hostname>[:<port>]` or `<IP address>[:<port>]`.
|
||||||
|
|
||||||
Some images (for example, Windows base images) contain artifacts
|
<p><br /></p>
|
||||||
whose distribution is restricted by license. When these images are
|
|
||||||
pushed to a registry, restricted artifacts are not included.
|
|
||||||
|
|
||||||
This configuration override this behavior for the specified
|
> **Deprecated**: Pushing nondistributable artifacts is now always enabled
|
||||||
registries.
|
> and this field is always `null`. This field will be removed in a API v1.49.
|
||||||
|
|
||||||
This option is useful when pushing images containing
|
|
||||||
nondistributable artifacts to a registry on an air-gapped network so
|
|
||||||
hosts on that network can pull the images without connecting to
|
|
||||||
another server.
|
|
||||||
|
|
||||||
> **Warning**: Nondistributable artifacts typically have restrictions
|
|
||||||
> on how and where they can be distributed and shared. Only use this
|
|
||||||
> feature to push artifacts to private registries and ensure that you
|
|
||||||
> are in compliance with any terms that cover redistributing
|
|
||||||
> nondistributable artifacts.
|
|
||||||
type: "array"
|
type: "array"
|
||||||
items:
|
items:
|
||||||
type: "string"
|
type: "string"
|
||||||
example: ["registry.internal.corp.example.com:3000", "[2001:db8:a0b:12f0::1]:443"]
|
example: []
|
||||||
InsecureRegistryCIDRs:
|
InsecureRegistryCIDRs:
|
||||||
description: |
|
description: |
|
||||||
List of IP ranges of insecure registries, using the CIDR syntax
|
List of IP ranges of insecure registries, using the CIDR syntax
|
||||||
@ -9626,7 +9614,7 @@ paths:
|
|||||||
type: "string"
|
type: "string"
|
||||||
example: "OK"
|
example: "OK"
|
||||||
headers:
|
headers:
|
||||||
API-Version:
|
Api-Version:
|
||||||
type: "string"
|
type: "string"
|
||||||
description: "Max API Version the server supports"
|
description: "Max API Version the server supports"
|
||||||
Builder-Version:
|
Builder-Version:
|
||||||
@ -9682,7 +9670,7 @@ paths:
|
|||||||
type: "string"
|
type: "string"
|
||||||
example: "(empty)"
|
example: "(empty)"
|
||||||
headers:
|
headers:
|
||||||
API-Version:
|
Api-Version:
|
||||||
type: "string"
|
type: "string"
|
||||||
description: "Max API Version the server supports"
|
description: "Max API Version the server supports"
|
||||||
Builder-Version:
|
Builder-Version:
|
||||||
@ -11726,6 +11714,7 @@ paths:
|
|||||||
example:
|
example:
|
||||||
ListenAddr: "0.0.0.0:2377"
|
ListenAddr: "0.0.0.0:2377"
|
||||||
AdvertiseAddr: "192.168.1.1:2377"
|
AdvertiseAddr: "192.168.1.1:2377"
|
||||||
|
DataPathAddr: "192.168.1.1"
|
||||||
RemoteAddrs:
|
RemoteAddrs:
|
||||||
- "node1:2377"
|
- "node1:2377"
|
||||||
JoinToken: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2"
|
JoinToken: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2"
|
||||||
|
28
vendor/github.com/docker/docker/api/types/registry/registry.go
generated
vendored
28
vendor/github.com/docker/docker/api/types/registry/registry.go
generated
vendored
@ -9,11 +9,29 @@ import (
|
|||||||
|
|
||||||
// ServiceConfig stores daemon registry services configuration.
|
// ServiceConfig stores daemon registry services configuration.
|
||||||
type ServiceConfig struct {
|
type ServiceConfig struct {
|
||||||
AllowNondistributableArtifactsCIDRs []*NetIPNet
|
AllowNondistributableArtifactsCIDRs []*NetIPNet `json:"AllowNondistributableArtifactsCIDRs,omitempty"` // Deprecated: non-distributable artifacts are deprecated and enabled by default. This field will be removed in the next release.
|
||||||
AllowNondistributableArtifactsHostnames []string
|
AllowNondistributableArtifactsHostnames []string `json:"AllowNondistributableArtifactsHostnames,omitempty"` // Deprecated: non-distributable artifacts are deprecated and enabled by default. This field will be removed in the next release.
|
||||||
InsecureRegistryCIDRs []*NetIPNet `json:"InsecureRegistryCIDRs"`
|
|
||||||
IndexConfigs map[string]*IndexInfo `json:"IndexConfigs"`
|
InsecureRegistryCIDRs []*NetIPNet `json:"InsecureRegistryCIDRs"`
|
||||||
Mirrors []string
|
IndexConfigs map[string]*IndexInfo `json:"IndexConfigs"`
|
||||||
|
Mirrors []string
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalJSON implements a custom marshaler to include legacy fields
|
||||||
|
// in API responses.
|
||||||
|
func (sc ServiceConfig) MarshalJSON() ([]byte, error) {
|
||||||
|
tmp := map[string]interface{}{
|
||||||
|
"InsecureRegistryCIDRs": sc.InsecureRegistryCIDRs,
|
||||||
|
"IndexConfigs": sc.IndexConfigs,
|
||||||
|
"Mirrors": sc.Mirrors,
|
||||||
|
}
|
||||||
|
if sc.AllowNondistributableArtifactsCIDRs != nil {
|
||||||
|
tmp["AllowNondistributableArtifactsCIDRs"] = nil
|
||||||
|
}
|
||||||
|
if sc.AllowNondistributableArtifactsHostnames != nil {
|
||||||
|
tmp["AllowNondistributableArtifactsHostnames"] = nil
|
||||||
|
}
|
||||||
|
return json.Marshal(tmp)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NetIPNet is the net.IPNet type, which can be marshalled and
|
// NetIPNet is the net.IPNet type, which can be marshalled and
|
||||||
|
4
vendor/github.com/docker/docker/api/types/system/info.go
generated
vendored
4
vendor/github.com/docker/docker/api/types/system/info.go
generated
vendored
@ -29,8 +29,8 @@ type Info struct {
|
|||||||
CPUSet bool
|
CPUSet bool
|
||||||
PidsLimit bool
|
PidsLimit bool
|
||||||
IPv4Forwarding bool
|
IPv4Forwarding bool
|
||||||
BridgeNfIptables bool
|
BridgeNfIptables bool `json:"BridgeNfIptables"` // Deprecated: netfilter module is now loaded on-demand and no longer during daemon startup, making this field obsolete. This field is always false and will be removed in the next release.
|
||||||
BridgeNfIP6tables bool `json:"BridgeNfIp6tables"`
|
BridgeNfIP6tables bool `json:"BridgeNfIp6tables"` // Deprecated: netfilter module is now loaded on-demand and no longer during daemon startup, making this field obsolete. This field is always false and will be removed in the next release.
|
||||||
Debug bool
|
Debug bool
|
||||||
NFd int
|
NFd int
|
||||||
OomKillDisable bool
|
OomKillDisable bool
|
||||||
|
4
vendor/github.com/docker/docker/client/ping.go
generated
vendored
4
vendor/github.com/docker/docker/client/ping.go
generated
vendored
@ -56,8 +56,8 @@ func parsePingResponse(cli *Client, resp serverResponse) (types.Ping, error) {
|
|||||||
err := cli.checkResponseErr(resp)
|
err := cli.checkResponseErr(resp)
|
||||||
return ping, errdefs.FromStatusCode(err, resp.statusCode)
|
return ping, errdefs.FromStatusCode(err, resp.statusCode)
|
||||||
}
|
}
|
||||||
ping.APIVersion = resp.header.Get("API-Version")
|
ping.APIVersion = resp.header.Get("Api-Version")
|
||||||
ping.OSType = resp.header.Get("OSType")
|
ping.OSType = resp.header.Get("Ostype")
|
||||||
if resp.header.Get("Docker-Experimental") == "true" {
|
if resp.header.Get("Docker-Experimental") == "true" {
|
||||||
ping.Experimental = true
|
ping.Experimental = true
|
||||||
}
|
}
|
||||||
|
107
vendor/github.com/docker/docker/pkg/archive/archive.go
generated
vendored
107
vendor/github.com/docker/docker/pkg/archive/archive.go
generated
vendored
@ -1,5 +1,5 @@
|
|||||||
// Package archive provides helper functions for dealing with archive files.
|
// Package archive provides helper functions for dealing with archive files.
|
||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"archive/tar"
|
"archive/tar"
|
||||||
@ -9,26 +9,26 @@ import (
|
|||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
"context"
|
"context"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"runtime/debug"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync/atomic"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/containerd/log"
|
"github.com/containerd/log"
|
||||||
"github.com/docker/docker/pkg/idtools"
|
"github.com/docker/docker/pkg/idtools"
|
||||||
"github.com/docker/docker/pkg/ioutils"
|
|
||||||
"github.com/docker/docker/pkg/pools"
|
"github.com/docker/docker/pkg/pools"
|
||||||
"github.com/docker/docker/pkg/system"
|
|
||||||
"github.com/klauspost/compress/zstd"
|
"github.com/klauspost/compress/zstd"
|
||||||
"github.com/moby/patternmatcher"
|
"github.com/moby/patternmatcher"
|
||||||
"github.com/moby/sys/sequential"
|
"github.com/moby/sys/sequential"
|
||||||
"github.com/pkg/errors"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// ImpliedDirectoryMode represents the mode (Unix permissions) applied to directories that are implied by files in a
|
// ImpliedDirectoryMode represents the mode (Unix permissions) applied to directories that are implied by files in a
|
||||||
@ -215,11 +215,22 @@ func gzDecompress(ctx context.Context, buf io.Reader) (io.ReadCloser, error) {
|
|||||||
return cmdStream(exec.CommandContext(ctx, unpigzPath, "-d", "-c"), buf)
|
return cmdStream(exec.CommandContext(ctx, unpigzPath, "-d", "-c"), buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
func wrapReadCloser(readBuf io.ReadCloser, cancel context.CancelFunc) io.ReadCloser {
|
type readCloserWrapper struct {
|
||||||
return ioutils.NewReadCloserWrapper(readBuf, func() error {
|
io.Reader
|
||||||
cancel()
|
closer func() error
|
||||||
return readBuf.Close()
|
closed atomic.Bool
|
||||||
})
|
}
|
||||||
|
|
||||||
|
func (r *readCloserWrapper) Close() error {
|
||||||
|
if !r.closed.CompareAndSwap(false, true) {
|
||||||
|
log.G(context.TODO()).Error("subsequent attempt to close readCloserWrapper")
|
||||||
|
if log.GetLevel() >= log.DebugLevel {
|
||||||
|
log.G(context.TODO()).Errorf("stack trace: %s", string(debug.Stack()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return r.closer()
|
||||||
}
|
}
|
||||||
|
|
||||||
// DecompressStream decompresses the archive and returns a ReaderCloser with the decompressed archive.
|
// DecompressStream decompresses the archive and returns a ReaderCloser with the decompressed archive.
|
||||||
@ -237,11 +248,26 @@ func DecompressStream(archive io.Reader) (io.ReadCloser, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wrapReader := func(r io.Reader, cancel context.CancelFunc) io.ReadCloser {
|
||||||
|
return &readCloserWrapper{
|
||||||
|
Reader: r,
|
||||||
|
closer: func() error {
|
||||||
|
if cancel != nil {
|
||||||
|
cancel()
|
||||||
|
}
|
||||||
|
if readCloser, ok := r.(io.ReadCloser); ok {
|
||||||
|
readCloser.Close()
|
||||||
|
}
|
||||||
|
p.Put(buf)
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
compression := DetectCompression(bs)
|
compression := DetectCompression(bs)
|
||||||
switch compression {
|
switch compression {
|
||||||
case Uncompressed:
|
case Uncompressed:
|
||||||
readBufWrapper := p.NewReadCloserWrapper(buf, buf)
|
return wrapReader(buf, nil), nil
|
||||||
return readBufWrapper, nil
|
|
||||||
case Gzip:
|
case Gzip:
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
|
||||||
@ -250,12 +276,10 @@ func DecompressStream(archive io.Reader) (io.ReadCloser, error) {
|
|||||||
cancel()
|
cancel()
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
readBufWrapper := p.NewReadCloserWrapper(buf, gzReader)
|
return wrapReader(gzReader, cancel), nil
|
||||||
return wrapReadCloser(readBufWrapper, cancel), nil
|
|
||||||
case Bzip2:
|
case Bzip2:
|
||||||
bz2Reader := bzip2.NewReader(buf)
|
bz2Reader := bzip2.NewReader(buf)
|
||||||
readBufWrapper := p.NewReadCloserWrapper(buf, bz2Reader)
|
return wrapReader(bz2Reader, nil), nil
|
||||||
return readBufWrapper, nil
|
|
||||||
case Xz:
|
case Xz:
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
|
||||||
@ -264,15 +288,13 @@ func DecompressStream(archive io.Reader) (io.ReadCloser, error) {
|
|||||||
cancel()
|
cancel()
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
readBufWrapper := p.NewReadCloserWrapper(buf, xzReader)
|
return wrapReader(xzReader, cancel), nil
|
||||||
return wrapReadCloser(readBufWrapper, cancel), nil
|
|
||||||
case Zstd:
|
case Zstd:
|
||||||
zstdReader, err := zstd.NewReader(buf)
|
zstdReader, err := zstd.NewReader(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
readBufWrapper := p.NewReadCloserWrapper(buf, zstdReader)
|
return wrapReader(zstdReader, nil), nil
|
||||||
return readBufWrapper, nil
|
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("Unsupported compression format %s", (&compression).Extension())
|
return nil, fmt.Errorf("Unsupported compression format %s", (&compression).Extension())
|
||||||
}
|
}
|
||||||
@ -484,7 +506,7 @@ func ReadSecurityXattrToTarHeader(path string, hdr *tar.Header) error {
|
|||||||
vfsCapRevision2 = 2
|
vfsCapRevision2 = 2
|
||||||
vfsCapRevision3 = 3
|
vfsCapRevision3 = 3
|
||||||
)
|
)
|
||||||
capability, _ := system.Lgetxattr(path, "security.capability")
|
capability, _ := lgetxattr(path, "security.capability")
|
||||||
if capability != nil {
|
if capability != nil {
|
||||||
if capability[versionOffset] == vfsCapRevision3 {
|
if capability[versionOffset] == vfsCapRevision3 {
|
||||||
// Convert VFS_CAP_REVISION_3 to VFS_CAP_REVISION_2 as root UID makes no
|
// Convert VFS_CAP_REVISION_3 to VFS_CAP_REVISION_2 as root UID makes no
|
||||||
@ -762,11 +784,11 @@ func createTarFile(path, extractDir string, hdr *tar.Header, reader io.Reader, o
|
|||||||
chownOpts = &idtools.Identity{UID: hdr.Uid, GID: hdr.Gid}
|
chownOpts = &idtools.Identity{UID: hdr.Uid, GID: hdr.Gid}
|
||||||
}
|
}
|
||||||
if err := os.Lchown(path, chownOpts.UID, chownOpts.GID); err != nil {
|
if err := os.Lchown(path, chownOpts.UID, chownOpts.GID); err != nil {
|
||||||
msg := "failed to Lchown %q for UID %d, GID %d"
|
var msg string
|
||||||
if inUserns && errors.Is(err, syscall.EINVAL) {
|
if inUserns && errors.Is(err, syscall.EINVAL) {
|
||||||
msg += " (try increasing the number of subordinate IDs in /etc/subuid and /etc/subgid)"
|
msg = " (try increasing the number of subordinate IDs in /etc/subuid and /etc/subgid)"
|
||||||
}
|
}
|
||||||
return errors.Wrapf(err, msg, path, hdr.Uid, hdr.Gid)
|
return fmt.Errorf("failed to Lchown %q for UID %d, GID %d%s: %w", path, hdr.Uid, hdr.Gid, msg, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -776,7 +798,7 @@ func createTarFile(path, extractDir string, hdr *tar.Header, reader io.Reader, o
|
|||||||
if !ok {
|
if !ok {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if err := system.Lsetxattr(path, xattr, []byte(value), 0); err != nil {
|
if err := lsetxattr(path, xattr, []byte(value), 0); err != nil {
|
||||||
if bestEffortXattrs && errors.Is(err, syscall.ENOTSUP) || errors.Is(err, syscall.EPERM) {
|
if bestEffortXattrs && errors.Is(err, syscall.ENOTSUP) || errors.Is(err, syscall.EPERM) {
|
||||||
// EPERM occurs if modifying xattrs is not allowed. This can
|
// EPERM occurs if modifying xattrs is not allowed. This can
|
||||||
// happen when running in userns with restrictions (ChromeOS).
|
// happen when running in userns with restrictions (ChromeOS).
|
||||||
@ -799,26 +821,22 @@ func createTarFile(path, extractDir string, hdr *tar.Header, reader io.Reader, o
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
aTime := hdr.AccessTime
|
aTime := boundTime(latestTime(hdr.AccessTime, hdr.ModTime))
|
||||||
if aTime.Before(hdr.ModTime) {
|
mTime := boundTime(hdr.ModTime)
|
||||||
// Last access time should never be before last modified time.
|
|
||||||
aTime = hdr.ModTime
|
|
||||||
}
|
|
||||||
|
|
||||||
// system.Chtimes doesn't support a NOFOLLOW flag atm
|
// chtimes doesn't support a NOFOLLOW flag atm
|
||||||
if hdr.Typeflag == tar.TypeLink {
|
if hdr.Typeflag == tar.TypeLink {
|
||||||
if fi, err := os.Lstat(hdr.Linkname); err == nil && (fi.Mode()&os.ModeSymlink == 0) {
|
if fi, err := os.Lstat(hdr.Linkname); err == nil && (fi.Mode()&os.ModeSymlink == 0) {
|
||||||
if err := system.Chtimes(path, aTime, hdr.ModTime); err != nil {
|
if err := chtimes(path, aTime, mTime); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if hdr.Typeflag != tar.TypeSymlink {
|
} else if hdr.Typeflag != tar.TypeSymlink {
|
||||||
if err := system.Chtimes(path, aTime, hdr.ModTime); err != nil {
|
if err := chtimes(path, aTime, mTime); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ts := []syscall.Timespec{timeToTimespec(aTime), timeToTimespec(hdr.ModTime)}
|
if err := lchtimes(path, aTime, mTime); err != nil {
|
||||||
if err := system.LUtimesNano(path, ts); err != nil && err != system.ErrNotSupportedPlatform {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1178,7 +1196,7 @@ loop:
|
|||||||
// #nosec G305 -- The header was checked for path traversal before it was appended to the dirs slice.
|
// #nosec G305 -- The header was checked for path traversal before it was appended to the dirs slice.
|
||||||
path := filepath.Join(dest, hdr.Name)
|
path := filepath.Join(dest, hdr.Name)
|
||||||
|
|
||||||
if err := system.Chtimes(path, hdr.AccessTime, hdr.ModTime); err != nil {
|
if err := chtimes(path, boundTime(latestTime(hdr.AccessTime, hdr.ModTime)), boundTime(hdr.ModTime)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1327,7 +1345,7 @@ func (archiver *Archiver) CopyFileWithTar(src, dst string) (err error) {
|
|||||||
dst = filepath.Join(dst, filepath.Base(src))
|
dst = filepath.Join(dst, filepath.Base(src))
|
||||||
}
|
}
|
||||||
// Create the holding directory if necessary
|
// Create the holding directory if necessary
|
||||||
if err := system.MkdirAll(filepath.Dir(dst), 0o700); err != nil {
|
if err := os.MkdirAll(filepath.Dir(dst), 0o700); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1424,11 +1442,14 @@ func cmdStream(cmd *exec.Cmd, input io.Reader) (io.ReadCloser, error) {
|
|||||||
close(done)
|
close(done)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return ioutils.NewReadCloserWrapper(pipeR, func() error {
|
return &readCloserWrapper{
|
||||||
// Close pipeR, and then wait for the command to complete before returning. We have to close pipeR first, as
|
Reader: pipeR,
|
||||||
// cmd.Wait waits for any non-file stdout/stderr/stdin to close.
|
closer: func() error {
|
||||||
err := pipeR.Close()
|
// Close pipeR, and then wait for the command to complete before returning. We have to close pipeR first, as
|
||||||
<-done
|
// cmd.Wait waits for any non-file stdout/stderr/stdin to close.
|
||||||
return err
|
err := pipeR.Close()
|
||||||
}), nil
|
<-done
|
||||||
|
return err
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
11
vendor/github.com/docker/docker/pkg/archive/archive_linux.go
generated
vendored
11
vendor/github.com/docker/docker/pkg/archive/archive_linux.go
generated
vendored
@ -1,14 +1,13 @@
|
|||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"archive/tar"
|
"archive/tar"
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/docker/docker/pkg/system"
|
|
||||||
"github.com/moby/sys/userns"
|
"github.com/moby/sys/userns"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -39,7 +38,7 @@ func (overlayWhiteoutConverter) ConvertWrite(hdr *tar.Header, path string, fi os
|
|||||||
}
|
}
|
||||||
|
|
||||||
// convert opaque dirs to AUFS format by writing an empty file with the prefix
|
// convert opaque dirs to AUFS format by writing an empty file with the prefix
|
||||||
opaque, err := system.Lgetxattr(path, opaqueXattrName)
|
opaque, err := lgetxattr(path, opaqueXattrName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -79,7 +78,7 @@ func (c overlayWhiteoutConverter) ConvertRead(hdr *tar.Header, path string) (boo
|
|||||||
|
|
||||||
err := unix.Setxattr(dir, opaqueXattrName, []byte{'y'}, 0)
|
err := unix.Setxattr(dir, opaqueXattrName, []byte{'y'}, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, errors.Wrapf(err, "setxattr(%q, %s=y)", dir, opaqueXattrName)
|
return false, fmt.Errorf("setxattr('%s', %s=y): %w", dir, opaqueXattrName, err)
|
||||||
}
|
}
|
||||||
// don't write the file itself
|
// don't write the file itself
|
||||||
return false, err
|
return false, err
|
||||||
@ -91,7 +90,7 @@ func (c overlayWhiteoutConverter) ConvertRead(hdr *tar.Header, path string) (boo
|
|||||||
originalPath := filepath.Join(dir, originalBase)
|
originalPath := filepath.Join(dir, originalBase)
|
||||||
|
|
||||||
if err := unix.Mknod(originalPath, unix.S_IFCHR, 0); err != nil {
|
if err := unix.Mknod(originalPath, unix.S_IFCHR, 0); err != nil {
|
||||||
return false, errors.Wrapf(err, "failed to mknod(%q, S_IFCHR, 0)", originalPath)
|
return false, fmt.Errorf("failed to mknod('%s', S_IFCHR, 0): %w", originalPath, err)
|
||||||
}
|
}
|
||||||
if err := os.Chown(originalPath, hdr.Uid, hdr.Gid); err != nil {
|
if err := os.Chown(originalPath, hdr.Uid, hdr.Gid); err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
|
2
vendor/github.com/docker/docker/pkg/archive/archive_other.go
generated
vendored
2
vendor/github.com/docker/docker/pkg/archive/archive_other.go
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
//go:build !linux
|
//go:build !linux
|
||||||
|
|
||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
func getWhiteoutConverter(format WhiteoutFormat) tarWhiteoutConverter {
|
func getWhiteoutConverter(format WhiteoutFormat) tarWhiteoutConverter {
|
||||||
return nil
|
return nil
|
||||||
|
5
vendor/github.com/docker/docker/pkg/archive/archive_unix.go
generated
vendored
5
vendor/github.com/docker/docker/pkg/archive/archive_unix.go
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
//go:build !windows
|
//go:build !windows
|
||||||
|
|
||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"archive/tar"
|
"archive/tar"
|
||||||
@ -12,7 +12,6 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/docker/docker/pkg/idtools"
|
"github.com/docker/docker/pkg/idtools"
|
||||||
"github.com/docker/docker/pkg/system"
|
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -109,7 +108,7 @@ func handleTarTypeBlockCharFifo(hdr *tar.Header, path string) error {
|
|||||||
mode |= unix.S_IFIFO
|
mode |= unix.S_IFIFO
|
||||||
}
|
}
|
||||||
|
|
||||||
return system.Mknod(path, mode, int(system.Mkdev(hdr.Devmajor, hdr.Devminor)))
|
return mknod(path, mode, unix.Mkdev(uint32(hdr.Devmajor), uint32(hdr.Devminor)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleLChmod(hdr *tar.Header, path string, hdrInfo os.FileInfo) error {
|
func handleLChmod(hdr *tar.Header, path string, hdrInfo os.FileInfo) error {
|
||||||
|
2
vendor/github.com/docker/docker/pkg/archive/archive_windows.go
generated
vendored
2
vendor/github.com/docker/docker/pkg/archive/archive_windows.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"archive/tar"
|
"archive/tar"
|
||||||
|
12
vendor/github.com/docker/docker/pkg/archive/changes.go
generated
vendored
12
vendor/github.com/docker/docker/pkg/archive/changes.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"archive/tar"
|
"archive/tar"
|
||||||
@ -6,17 +6,16 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"io/fs"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/containerd/log"
|
"github.com/containerd/log"
|
||||||
"github.com/docker/docker/pkg/idtools"
|
"github.com/docker/docker/pkg/idtools"
|
||||||
"github.com/docker/docker/pkg/pools"
|
"github.com/docker/docker/pkg/pools"
|
||||||
"github.com/docker/docker/pkg/system"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// ChangeType represents the change type.
|
// ChangeType represents the change type.
|
||||||
@ -74,11 +73,6 @@ func sameFsTime(a, b time.Time) bool {
|
|||||||
(a.Nanosecond() == 0 || b.Nanosecond() == 0))
|
(a.Nanosecond() == 0 || b.Nanosecond() == 0))
|
||||||
}
|
}
|
||||||
|
|
||||||
func sameFsTimeSpec(a, b syscall.Timespec) bool {
|
|
||||||
return a.Sec == b.Sec &&
|
|
||||||
(a.Nsec == b.Nsec || a.Nsec == 0 || b.Nsec == 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Changes walks the path rw and determines changes for the files in the path,
|
// Changes walks the path rw and determines changes for the files in the path,
|
||||||
// with respect to the parent layers
|
// with respect to the parent layers
|
||||||
func Changes(layers []string, rw string) ([]Change, error) {
|
func Changes(layers []string, rw string) ([]Change, error) {
|
||||||
@ -210,7 +204,7 @@ func changes(layers []string, rw string, dc deleteChange, sc skipChange) ([]Chan
|
|||||||
type FileInfo struct {
|
type FileInfo struct {
|
||||||
parent *FileInfo
|
parent *FileInfo
|
||||||
name string
|
name string
|
||||||
stat *system.StatT
|
stat fs.FileInfo
|
||||||
children map[string]*FileInfo
|
children map[string]*FileInfo
|
||||||
capability []byte
|
capability []byte
|
||||||
added bool
|
added bool
|
||||||
|
11
vendor/github.com/docker/docker/pkg/archive/changes_linux.go
generated
vendored
11
vendor/github.com/docker/docker/pkg/archive/changes_linux.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
@ -9,7 +9,6 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/docker/docker/pkg/system"
|
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -74,12 +73,8 @@ func walkchunk(path string, fi os.FileInfo, dir string, root *FileInfo) error {
|
|||||||
parent: parent,
|
parent: parent,
|
||||||
}
|
}
|
||||||
cpath := filepath.Join(dir, path)
|
cpath := filepath.Join(dir, path)
|
||||||
stat, err := system.FromStatT(fi.Sys().(*syscall.Stat_t))
|
info.stat = fi
|
||||||
if err != nil {
|
info.capability, _ = lgetxattr(cpath, "security.capability") // lgetxattr(2): fs access
|
||||||
return err
|
|
||||||
}
|
|
||||||
info.stat = stat
|
|
||||||
info.capability, _ = system.Lgetxattr(cpath, "security.capability") // lgetxattr(2): fs access
|
|
||||||
parent.children[info.name] = info
|
parent.children[info.name] = info
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
12
vendor/github.com/docker/docker/pkg/archive/changes_other.go
generated
vendored
12
vendor/github.com/docker/docker/pkg/archive/changes_other.go
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
//go:build !linux
|
//go:build !linux
|
||||||
|
|
||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -8,8 +8,6 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/docker/docker/pkg/system"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func collectFileInfoForChanges(oldDir, newDir string) (*FileInfo, *FileInfo, error) {
|
func collectFileInfoForChanges(oldDir, newDir string) (*FileInfo, *FileInfo, error) {
|
||||||
@ -72,7 +70,7 @@ func collectFileInfo(sourceDir string) (*FileInfo, error) {
|
|||||||
return fmt.Errorf("collectFileInfo: Unexpectedly no parent for %s", relPath)
|
return fmt.Errorf("collectFileInfo: Unexpectedly no parent for %s", relPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
s, err := system.Lstat(path)
|
s, err := os.Lstat(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -84,11 +82,7 @@ func collectFileInfo(sourceDir string) (*FileInfo, error) {
|
|||||||
stat: s,
|
stat: s,
|
||||||
}
|
}
|
||||||
|
|
||||||
// system.Lgetxattr is only implemented on Linux and produces an error
|
info.capability, _ = lgetxattr(path, "security.capability")
|
||||||
// on other platforms. This code is intentionally left commented-out
|
|
||||||
// as a reminder to include this code if this would ever be implemented
|
|
||||||
// on other platforms.
|
|
||||||
// info.capability, _ = system.Lgetxattr(path, "security.capability")
|
|
||||||
|
|
||||||
parent.children[info.name] = info
|
parent.children[info.name] = info
|
||||||
|
|
||||||
|
22
vendor/github.com/docker/docker/pkg/archive/changes_unix.go
generated
vendored
22
vendor/github.com/docker/docker/pkg/archive/changes_unix.go
generated
vendored
@ -1,21 +1,21 @@
|
|||||||
//go:build !windows
|
//go:build !windows
|
||||||
|
|
||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io/fs"
|
||||||
"os"
|
"os"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/docker/docker/pkg/system"
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func statDifferent(oldStat *system.StatT, newStat *system.StatT) bool {
|
func statDifferent(oldStat fs.FileInfo, newStat fs.FileInfo) bool {
|
||||||
|
oldSys := oldStat.Sys().(*syscall.Stat_t)
|
||||||
|
newSys := newStat.Sys().(*syscall.Stat_t)
|
||||||
// Don't look at size for dirs, its not a good measure of change
|
// Don't look at size for dirs, its not a good measure of change
|
||||||
if oldStat.Mode() != newStat.Mode() ||
|
if oldStat.Mode() != newStat.Mode() ||
|
||||||
oldStat.UID() != newStat.UID() ||
|
oldSys.Uid != newSys.Uid ||
|
||||||
oldStat.GID() != newStat.GID() ||
|
oldSys.Gid != newSys.Gid ||
|
||||||
oldStat.Rdev() != newStat.Rdev() ||
|
oldSys.Rdev != newSys.Rdev ||
|
||||||
// Don't look at size or modification time for dirs, its not a good
|
// Don't look at size or modification time for dirs, its not a good
|
||||||
// measure of change. See https://github.com/moby/moby/issues/9874
|
// measure of change. See https://github.com/moby/moby/issues/9874
|
||||||
// for a description of the issue with modification time, and
|
// for a description of the issue with modification time, and
|
||||||
@ -23,15 +23,15 @@ func statDifferent(oldStat *system.StatT, newStat *system.StatT) bool {
|
|||||||
// (Note that in the Windows implementation of this function,
|
// (Note that in the Windows implementation of this function,
|
||||||
// modification time IS taken as a change). See
|
// modification time IS taken as a change). See
|
||||||
// https://github.com/moby/moby/pull/37982 for more information.
|
// https://github.com/moby/moby/pull/37982 for more information.
|
||||||
(oldStat.Mode()&unix.S_IFDIR != unix.S_IFDIR &&
|
(!oldStat.Mode().IsDir() &&
|
||||||
(!sameFsTimeSpec(oldStat.Mtim(), newStat.Mtim()) || (oldStat.Size() != newStat.Size()))) {
|
(!sameFsTime(oldStat.ModTime(), newStat.ModTime()) || (oldStat.Size() != newStat.Size()))) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (info *FileInfo) isDir() bool {
|
func (info *FileInfo) isDir() bool {
|
||||||
return info.parent == nil || info.stat.Mode()&unix.S_IFDIR != 0
|
return info.parent == nil || info.stat.Mode().IsDir()
|
||||||
}
|
}
|
||||||
|
|
||||||
func getIno(fi os.FileInfo) uint64 {
|
func getIno(fi os.FileInfo) uint64 {
|
||||||
|
9
vendor/github.com/docker/docker/pkg/archive/changes_windows.go
generated
vendored
9
vendor/github.com/docker/docker/pkg/archive/changes_windows.go
generated
vendored
@ -1,19 +1,18 @@
|
|||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io/fs"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/docker/docker/pkg/system"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func statDifferent(oldStat *system.StatT, newStat *system.StatT) bool {
|
func statDifferent(oldStat fs.FileInfo, newStat fs.FileInfo) bool {
|
||||||
// Note there is slight difference between the Linux and Windows
|
// Note there is slight difference between the Linux and Windows
|
||||||
// implementations here. Due to https://github.com/moby/moby/issues/9874,
|
// implementations here. Due to https://github.com/moby/moby/issues/9874,
|
||||||
// and the fix at https://github.com/moby/moby/pull/11422, Linux does not
|
// and the fix at https://github.com/moby/moby/pull/11422, Linux does not
|
||||||
// consider a change to the directory time as a change. Windows on NTFS
|
// consider a change to the directory time as a change. Windows on NTFS
|
||||||
// does. See https://github.com/moby/moby/pull/37982 for more information.
|
// does. See https://github.com/moby/moby/pull/37982 for more information.
|
||||||
|
|
||||||
if !sameFsTime(oldStat.Mtim(), newStat.Mtim()) ||
|
if !sameFsTime(oldStat.ModTime(), newStat.ModTime()) ||
|
||||||
oldStat.Mode() != newStat.Mode() ||
|
oldStat.Mode() != newStat.Mode() ||
|
||||||
oldStat.Size() != newStat.Size() && !oldStat.Mode().IsDir() {
|
oldStat.Size() != newStat.Size() && !oldStat.Mode().IsDir() {
|
||||||
return true
|
return true
|
||||||
|
5
vendor/github.com/docker/docker/pkg/archive/copy.go
generated
vendored
5
vendor/github.com/docker/docker/pkg/archive/copy.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"archive/tar"
|
"archive/tar"
|
||||||
@ -10,7 +10,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/containerd/log"
|
"github.com/containerd/log"
|
||||||
"github.com/docker/docker/pkg/system"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Errors used or returned by this file.
|
// Errors used or returned by this file.
|
||||||
@ -203,7 +202,7 @@ func CopyInfoDestinationPath(path string) (info CopyInfo, err error) {
|
|||||||
return CopyInfo{}, err
|
return CopyInfo{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !system.IsAbs(linkTarget) {
|
if !filepath.IsAbs(linkTarget) {
|
||||||
// Join with the parent directory.
|
// Join with the parent directory.
|
||||||
dstParent, _ := SplitPathDirEntry(path)
|
dstParent, _ := SplitPathDirEntry(path)
|
||||||
linkTarget = filepath.Join(dstParent, linkTarget)
|
linkTarget = filepath.Join(dstParent, linkTarget)
|
||||||
|
2
vendor/github.com/docker/docker/pkg/archive/copy_unix.go
generated
vendored
2
vendor/github.com/docker/docker/pkg/archive/copy_unix.go
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
//go:build !windows
|
//go:build !windows
|
||||||
|
|
||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
2
vendor/github.com/docker/docker/pkg/archive/copy_windows.go
generated
vendored
2
vendor/github.com/docker/docker/pkg/archive/copy_windows.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
7
vendor/github.com/docker/docker/pkg/archive/dev_freebsd.go
generated
vendored
Normal file
7
vendor/github.com/docker/docker/pkg/archive/dev_freebsd.go
generated
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
//go:build freebsd
|
||||||
|
|
||||||
|
package archive
|
||||||
|
|
||||||
|
import "golang.org/x/sys/unix"
|
||||||
|
|
||||||
|
var mknod = unix.Mknod
|
9
vendor/github.com/docker/docker/pkg/archive/dev_unix.go
generated
vendored
Normal file
9
vendor/github.com/docker/docker/pkg/archive/dev_unix.go
generated
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
//go:build !windows && !freebsd
|
||||||
|
|
||||||
|
package archive
|
||||||
|
|
||||||
|
import "golang.org/x/sys/unix"
|
||||||
|
|
||||||
|
func mknod(path string, mode uint32, dev uint64) error {
|
||||||
|
return unix.Mknod(path, mode, int(dev))
|
||||||
|
}
|
5
vendor/github.com/docker/docker/pkg/archive/diff.go
generated
vendored
5
vendor/github.com/docker/docker/pkg/archive/diff.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"archive/tar"
|
"archive/tar"
|
||||||
@ -12,7 +12,6 @@ import (
|
|||||||
|
|
||||||
"github.com/containerd/log"
|
"github.com/containerd/log"
|
||||||
"github.com/docker/docker/pkg/pools"
|
"github.com/docker/docker/pkg/pools"
|
||||||
"github.com/docker/docker/pkg/system"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// UnpackLayer unpack `layer` to a `dest`. The stream `layer` can be
|
// UnpackLayer unpack `layer` to a `dest`. The stream `layer` can be
|
||||||
@ -200,7 +199,7 @@ func UnpackLayer(dest string, layer io.Reader, options *TarOptions) (size int64,
|
|||||||
for _, hdr := range dirs {
|
for _, hdr := range dirs {
|
||||||
// #nosec G305 -- The header was checked for path traversal before it was appended to the dirs slice.
|
// #nosec G305 -- The header was checked for path traversal before it was appended to the dirs slice.
|
||||||
path := filepath.Join(dest, hdr.Name)
|
path := filepath.Join(dest, hdr.Name)
|
||||||
if err := system.Chtimes(path, hdr.AccessTime, hdr.ModTime); err != nil {
|
if err := chtimes(path, hdr.AccessTime, hdr.ModTime); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
38
vendor/github.com/docker/docker/pkg/archive/time.go
generated
vendored
Normal file
38
vendor/github.com/docker/docker/pkg/archive/time.go
generated
vendored
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
package archive
|
||||||
|
|
||||||
|
import (
|
||||||
|
"syscall"
|
||||||
|
"time"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
minTime = time.Unix(0, 0)
|
||||||
|
maxTime time.Time
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
if unsafe.Sizeof(syscall.Timespec{}.Nsec) == 8 {
|
||||||
|
// This is a 64 bit timespec
|
||||||
|
// os.Chtimes limits time to the following
|
||||||
|
maxTime = time.Unix(0, 1<<63-1)
|
||||||
|
} else {
|
||||||
|
// This is a 32 bit timespec
|
||||||
|
maxTime = time.Unix(1<<31-1, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func boundTime(t time.Time) time.Time {
|
||||||
|
if t.Before(minTime) || t.After(maxTime) {
|
||||||
|
return minTime
|
||||||
|
}
|
||||||
|
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
func latestTime(t1, t2 time.Time) time.Time {
|
||||||
|
if t1.Before(t2) {
|
||||||
|
return t2
|
||||||
|
}
|
||||||
|
return t1
|
||||||
|
}
|
16
vendor/github.com/docker/docker/pkg/archive/time_linux.go
generated
vendored
16
vendor/github.com/docker/docker/pkg/archive/time_linux.go
generated
vendored
@ -1,16 +0,0 @@
|
|||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
func timeToTimespec(time time.Time) (ts syscall.Timespec) {
|
|
||||||
if time.IsZero() {
|
|
||||||
// Return UTIME_OMIT special value
|
|
||||||
ts.Sec = 0
|
|
||||||
ts.Nsec = (1 << 30) - 2
|
|
||||||
return
|
|
||||||
}
|
|
||||||
return syscall.NsecToTimespec(time.UnixNano())
|
|
||||||
}
|
|
40
vendor/github.com/docker/docker/pkg/archive/time_nonwindows.go
generated
vendored
Normal file
40
vendor/github.com/docker/docker/pkg/archive/time_nonwindows.go
generated
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
//go:build !windows
|
||||||
|
|
||||||
|
package archive
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"golang.org/x/sys/unix"
|
||||||
|
)
|
||||||
|
|
||||||
|
// chtimes changes the access time and modified time of a file at the given path.
|
||||||
|
// If the modified time is prior to the Unix Epoch (unixMinTime), or after the
|
||||||
|
// end of Unix Time (unixEpochTime), os.Chtimes has undefined behavior. In this
|
||||||
|
// case, Chtimes defaults to Unix Epoch, just in case.
|
||||||
|
func chtimes(name string, atime time.Time, mtime time.Time) error {
|
||||||
|
return os.Chtimes(name, atime, mtime)
|
||||||
|
}
|
||||||
|
|
||||||
|
func timeToTimespec(time time.Time) (ts unix.Timespec) {
|
||||||
|
if time.IsZero() {
|
||||||
|
// Return UTIME_OMIT special value
|
||||||
|
ts.Sec = 0
|
||||||
|
ts.Nsec = (1 << 30) - 2
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return unix.NsecToTimespec(time.UnixNano())
|
||||||
|
}
|
||||||
|
|
||||||
|
func lchtimes(name string, atime time.Time, mtime time.Time) error {
|
||||||
|
utimes := [2]unix.Timespec{
|
||||||
|
timeToTimespec(atime),
|
||||||
|
timeToTimespec(mtime),
|
||||||
|
}
|
||||||
|
err := unix.UtimesNanoAt(unix.AT_FDCWD, name, utimes[0:], unix.AT_SYMLINK_NOFOLLOW)
|
||||||
|
if err != nil && err != unix.ENOSYS {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
16
vendor/github.com/docker/docker/pkg/archive/time_unsupported.go
generated
vendored
16
vendor/github.com/docker/docker/pkg/archive/time_unsupported.go
generated
vendored
@ -1,16 +0,0 @@
|
|||||||
//go:build !linux
|
|
||||||
|
|
||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
func timeToTimespec(time time.Time) (ts syscall.Timespec) {
|
|
||||||
nsec := int64(0)
|
|
||||||
if !time.IsZero() {
|
|
||||||
nsec = time.UnixNano()
|
|
||||||
}
|
|
||||||
return syscall.NsecToTimespec(nsec)
|
|
||||||
}
|
|
32
vendor/github.com/docker/docker/pkg/archive/time_windows.go
generated
vendored
Normal file
32
vendor/github.com/docker/docker/pkg/archive/time_windows.go
generated
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package archive
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"golang.org/x/sys/windows"
|
||||||
|
)
|
||||||
|
|
||||||
|
func chtimes(name string, atime time.Time, mtime time.Time) error {
|
||||||
|
if err := os.Chtimes(name, atime, mtime); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
pathp, err := windows.UTF16PtrFromString(name)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
h, err := windows.CreateFile(pathp,
|
||||||
|
windows.FILE_WRITE_ATTRIBUTES, windows.FILE_SHARE_WRITE, nil,
|
||||||
|
windows.OPEN_EXISTING, windows.FILE_FLAG_BACKUP_SEMANTICS, 0)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer windows.Close(h)
|
||||||
|
c := windows.NsecToFiletime(mtime.UnixNano())
|
||||||
|
return windows.SetFileTime(h, &c, nil, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func lchtimes(name string, atime time.Time, mtime time.Time) error {
|
||||||
|
return nil
|
||||||
|
}
|
2
vendor/github.com/docker/docker/pkg/archive/whiteouts.go
generated
vendored
2
vendor/github.com/docker/docker/pkg/archive/whiteouts.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
// Whiteouts are files with a special meaning for the layered filesystem.
|
// Whiteouts are files with a special meaning for the layered filesystem.
|
||||||
// Docker uses AUFS whiteout files inside exported archives. In other
|
// Docker uses AUFS whiteout files inside exported archives. In other
|
||||||
|
2
vendor/github.com/docker/docker/pkg/archive/wrap.go
generated
vendored
2
vendor/github.com/docker/docker/pkg/archive/wrap.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
package archive // import "github.com/docker/docker/pkg/archive"
|
package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"archive/tar"
|
"archive/tar"
|
||||||
|
52
vendor/github.com/docker/docker/pkg/archive/xattr_supported.go
generated
vendored
Normal file
52
vendor/github.com/docker/docker/pkg/archive/xattr_supported.go
generated
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
//go:build linux || darwin || freebsd || netbsd
|
||||||
|
|
||||||
|
package archive
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io/fs"
|
||||||
|
|
||||||
|
"golang.org/x/sys/unix"
|
||||||
|
)
|
||||||
|
|
||||||
|
// lgetxattr retrieves the value of the extended attribute identified by attr
|
||||||
|
// and associated with the given path in the file system.
|
||||||
|
// It 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, err := unix.Lgetxattr(path, attr, dest)
|
||||||
|
|
||||||
|
for errors.Is(err, unix.ERANGE) {
|
||||||
|
// Buffer too small, use zero-sized buffer to get the actual size
|
||||||
|
sz, err = unix.Lgetxattr(path, attr, []byte{})
|
||||||
|
if err != nil {
|
||||||
|
return nil, wrapPathError("lgetxattr", path, attr, err)
|
||||||
|
}
|
||||||
|
dest = make([]byte, sz)
|
||||||
|
sz, err = unix.Lgetxattr(path, attr, dest)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, noattr) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
return nil, wrapPathError("lgetxattr", path, attr, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return dest[:sz], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// lsetxattr sets the value of the extended attribute identified by attr
|
||||||
|
// and associated with the given path in the file system.
|
||||||
|
func lsetxattr(path string, attr string, data []byte, flags int) error {
|
||||||
|
return wrapPathError("lsetxattr", path, attr, unix.Lsetxattr(path, attr, data, flags))
|
||||||
|
}
|
||||||
|
|
||||||
|
func wrapPathError(op, path, attr string, err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &fs.PathError{Op: op, Path: path, Err: fmt.Errorf("xattr %q: %w", attr, err)}
|
||||||
|
}
|
5
vendor/github.com/docker/docker/pkg/archive/xattr_supported_linux.go
generated
vendored
Normal file
5
vendor/github.com/docker/docker/pkg/archive/xattr_supported_linux.go
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package archive
|
||||||
|
|
||||||
|
import "golang.org/x/sys/unix"
|
||||||
|
|
||||||
|
var noattr = unix.ENODATA
|
7
vendor/github.com/docker/docker/pkg/archive/xattr_supported_unix.go
generated
vendored
Normal file
7
vendor/github.com/docker/docker/pkg/archive/xattr_supported_unix.go
generated
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
//go:build !linux && !windows
|
||||||
|
|
||||||
|
package archive
|
||||||
|
|
||||||
|
import "golang.org/x/sys/unix"
|
||||||
|
|
||||||
|
var noattr = unix.ENOATTR
|
11
vendor/github.com/docker/docker/pkg/archive/xattr_unsupported.go
generated
vendored
Normal file
11
vendor/github.com/docker/docker/pkg/archive/xattr_unsupported.go
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
//go:build !linux && !darwin && !freebsd && !netbsd
|
||||||
|
|
||||||
|
package archive
|
||||||
|
|
||||||
|
func lgetxattr(path string, attr string) ([]byte, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func lsetxattr(path string, attr string, data []byte, flags int) error {
|
||||||
|
return nil
|
||||||
|
}
|
20
vendor/github.com/docker/docker/pkg/system/lstat_unix.go
generated
vendored
20
vendor/github.com/docker/docker/pkg/system/lstat_unix.go
generated
vendored
@ -1,20 +0,0 @@
|
|||||||
//go:build !windows
|
|
||||||
|
|
||||||
package system // import "github.com/docker/docker/pkg/system"
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Lstat takes a path to a file and returns
|
|
||||||
// a system.StatT type pertaining to that file.
|
|
||||||
//
|
|
||||||
// Throws an error if the file does not exist
|
|
||||||
func Lstat(path string) (*StatT, error) {
|
|
||||||
s := &syscall.Stat_t{}
|
|
||||||
if err := syscall.Lstat(path, s); err != nil {
|
|
||||||
return nil, &os.PathError{Op: "Lstat", Path: path, Err: err}
|
|
||||||
}
|
|
||||||
return fromStatT(s)
|
|
||||||
}
|
|
14
vendor/github.com/docker/docker/pkg/system/lstat_windows.go
generated
vendored
14
vendor/github.com/docker/docker/pkg/system/lstat_windows.go
generated
vendored
@ -1,14 +0,0 @@
|
|||||||
package system // import "github.com/docker/docker/pkg/system"
|
|
||||||
|
|
||||||
import "os"
|
|
||||||
|
|
||||||
// Lstat calls os.Lstat to get a fileinfo interface back.
|
|
||||||
// This is then copied into our own locally defined structure.
|
|
||||||
func Lstat(path string) (*StatT, error) {
|
|
||||||
fi, err := os.Lstat(path)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return fromStatT(&fi)
|
|
||||||
}
|
|
16
vendor/github.com/docker/docker/pkg/system/mknod.go
generated
vendored
16
vendor/github.com/docker/docker/pkg/system/mknod.go
generated
vendored
@ -1,16 +0,0 @@
|
|||||||
//go:build !windows
|
|
||||||
|
|
||||||
package system // import "github.com/docker/docker/pkg/system"
|
|
||||||
|
|
||||||
import (
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Mkdev is used to build the value of linux devices (in /dev/) which specifies major
|
|
||||||
// and minor number of the newly created device special file.
|
|
||||||
// Linux device nodes are a bit weird due to backwards compat with 16 bit device nodes.
|
|
||||||
// They are, from low to high: the lower 8 bits of the minor, then 12 bits of the major,
|
|
||||||
// then the top 12 bits of the minor.
|
|
||||||
func Mkdev(major int64, minor int64) uint32 {
|
|
||||||
return uint32(unix.Mkdev(uint32(major), uint32(minor)))
|
|
||||||
}
|
|
13
vendor/github.com/docker/docker/pkg/system/mknod_freebsd.go
generated
vendored
13
vendor/github.com/docker/docker/pkg/system/mknod_freebsd.go
generated
vendored
@ -1,13 +0,0 @@
|
|||||||
//go:build freebsd
|
|
||||||
|
|
||||||
package system // import "github.com/docker/docker/pkg/system"
|
|
||||||
|
|
||||||
import (
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Mknod creates a filesystem node (file, device special file or named pipe) named path
|
|
||||||
// with attributes specified by mode and dev.
|
|
||||||
func Mknod(path string, mode uint32, dev int) error {
|
|
||||||
return unix.Mknod(path, mode, uint64(dev))
|
|
||||||
}
|
|
13
vendor/github.com/docker/docker/pkg/system/mknod_unix.go
generated
vendored
13
vendor/github.com/docker/docker/pkg/system/mknod_unix.go
generated
vendored
@ -1,13 +0,0 @@
|
|||||||
//go:build !freebsd && !windows
|
|
||||||
|
|
||||||
package system // import "github.com/docker/docker/pkg/system"
|
|
||||||
|
|
||||||
import (
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Mknod creates a filesystem node (file, device special file or named pipe) named path
|
|
||||||
// with attributes specified by mode and dev.
|
|
||||||
func Mknod(path string, mode uint32, dev int) error {
|
|
||||||
return unix.Mknod(path, mode, dev)
|
|
||||||
}
|
|
17
vendor/github.com/docker/docker/pkg/system/stat_bsd.go
generated
vendored
17
vendor/github.com/docker/docker/pkg/system/stat_bsd.go
generated
vendored
@ -1,17 +0,0 @@
|
|||||||
//go:build freebsd || netbsd
|
|
||||||
|
|
||||||
package system // import "github.com/docker/docker/pkg/system"
|
|
||||||
|
|
||||||
import "syscall"
|
|
||||||
|
|
||||||
// fromStatT converts a syscall.Stat_t type to a system.Stat_t type
|
|
||||||
func fromStatT(s *syscall.Stat_t) (*StatT, error) {
|
|
||||||
return &StatT{
|
|
||||||
size: s.Size,
|
|
||||||
mode: uint32(s.Mode),
|
|
||||||
uid: s.Uid,
|
|
||||||
gid: s.Gid,
|
|
||||||
rdev: uint64(s.Rdev),
|
|
||||||
mtim: s.Mtimespec,
|
|
||||||
}, nil
|
|
||||||
}
|
|
15
vendor/github.com/docker/docker/pkg/system/stat_darwin.go
generated
vendored
15
vendor/github.com/docker/docker/pkg/system/stat_darwin.go
generated
vendored
@ -1,15 +0,0 @@
|
|||||||
package system // import "github.com/docker/docker/pkg/system"
|
|
||||||
|
|
||||||
import "syscall"
|
|
||||||
|
|
||||||
// fromStatT converts a syscall.Stat_t type to a system.Stat_t type
|
|
||||||
func fromStatT(s *syscall.Stat_t) (*StatT, error) {
|
|
||||||
return &StatT{
|
|
||||||
size: s.Size,
|
|
||||||
mode: uint32(s.Mode),
|
|
||||||
uid: s.Uid,
|
|
||||||
gid: s.Gid,
|
|
||||||
rdev: uint64(s.Rdev),
|
|
||||||
mtim: s.Mtimespec,
|
|
||||||
}, nil
|
|
||||||
}
|
|
15
vendor/github.com/docker/docker/pkg/system/stat_illumos.go
generated
vendored
15
vendor/github.com/docker/docker/pkg/system/stat_illumos.go
generated
vendored
@ -1,15 +0,0 @@
|
|||||||
package system // import "github.com/docker/docker/pkg/system"
|
|
||||||
|
|
||||||
import "syscall"
|
|
||||||
|
|
||||||
// fromStatT converts a syscall.Stat_t type to a system.Stat_t type
|
|
||||||
func fromStatT(s *syscall.Stat_t) (*StatT, error) {
|
|
||||||
return &StatT{
|
|
||||||
size: s.Size,
|
|
||||||
mode: uint32(s.Mode),
|
|
||||||
uid: s.Uid,
|
|
||||||
gid: s.Gid,
|
|
||||||
rdev: uint64(s.Rdev),
|
|
||||||
mtim: s.Mtim,
|
|
||||||
}, nil
|
|
||||||
}
|
|
22
vendor/github.com/docker/docker/pkg/system/stat_linux.go
generated
vendored
22
vendor/github.com/docker/docker/pkg/system/stat_linux.go
generated
vendored
@ -1,22 +0,0 @@
|
|||||||
package system // import "github.com/docker/docker/pkg/system"
|
|
||||||
|
|
||||||
import "syscall"
|
|
||||||
|
|
||||||
// fromStatT converts a syscall.Stat_t type to a system.Stat_t type
|
|
||||||
func fromStatT(s *syscall.Stat_t) (*StatT, error) {
|
|
||||||
return &StatT{
|
|
||||||
size: s.Size,
|
|
||||||
mode: s.Mode,
|
|
||||||
uid: s.Uid,
|
|
||||||
gid: s.Gid,
|
|
||||||
// the type is 32bit on mips
|
|
||||||
rdev: uint64(s.Rdev), //nolint: unconvert
|
|
||||||
mtim: s.Mtim,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// FromStatT converts a syscall.Stat_t type to a system.Stat_t type
|
|
||||||
// This is exposed on Linux as pkg/archive/changes uses it.
|
|
||||||
func FromStatT(s *syscall.Stat_t) (*StatT, error) {
|
|
||||||
return fromStatT(s)
|
|
||||||
}
|
|
15
vendor/github.com/docker/docker/pkg/system/stat_openbsd.go
generated
vendored
15
vendor/github.com/docker/docker/pkg/system/stat_openbsd.go
generated
vendored
@ -1,15 +0,0 @@
|
|||||||
package system // import "github.com/docker/docker/pkg/system"
|
|
||||||
|
|
||||||
import "syscall"
|
|
||||||
|
|
||||||
// fromStatT converts a syscall.Stat_t type to a system.Stat_t type
|
|
||||||
func fromStatT(s *syscall.Stat_t) (*StatT, error) {
|
|
||||||
return &StatT{
|
|
||||||
size: s.Size,
|
|
||||||
mode: uint32(s.Mode),
|
|
||||||
uid: s.Uid,
|
|
||||||
gid: s.Gid,
|
|
||||||
rdev: uint64(s.Rdev),
|
|
||||||
mtim: s.Mtim,
|
|
||||||
}, nil
|
|
||||||
}
|
|
66
vendor/github.com/docker/docker/pkg/system/stat_unix.go
generated
vendored
66
vendor/github.com/docker/docker/pkg/system/stat_unix.go
generated
vendored
@ -1,66 +0,0 @@
|
|||||||
//go:build !windows
|
|
||||||
|
|
||||||
package system // import "github.com/docker/docker/pkg/system"
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
// StatT type contains status of a file. It contains metadata
|
|
||||||
// like permission, owner, group, size, etc about a file.
|
|
||||||
type StatT struct {
|
|
||||||
mode uint32
|
|
||||||
uid uint32
|
|
||||||
gid uint32
|
|
||||||
rdev uint64
|
|
||||||
size int64
|
|
||||||
mtim syscall.Timespec
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mode returns file's permission mode.
|
|
||||||
func (s StatT) Mode() uint32 {
|
|
||||||
return s.mode
|
|
||||||
}
|
|
||||||
|
|
||||||
// UID returns file's user id of owner.
|
|
||||||
func (s StatT) UID() uint32 {
|
|
||||||
return s.uid
|
|
||||||
}
|
|
||||||
|
|
||||||
// GID returns file's group id of owner.
|
|
||||||
func (s StatT) GID() uint32 {
|
|
||||||
return s.gid
|
|
||||||
}
|
|
||||||
|
|
||||||
// Rdev returns file's device ID (if it's special file).
|
|
||||||
func (s StatT) Rdev() uint64 {
|
|
||||||
return s.rdev
|
|
||||||
}
|
|
||||||
|
|
||||||
// Size returns file's size.
|
|
||||||
func (s StatT) Size() int64 {
|
|
||||||
return s.size
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mtim returns file's last modification time.
|
|
||||||
func (s StatT) Mtim() syscall.Timespec {
|
|
||||||
return s.mtim
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsDir reports whether s describes a directory.
|
|
||||||
func (s StatT) IsDir() bool {
|
|
||||||
return s.mode&syscall.S_IFDIR != 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stat takes a path to a file and returns
|
|
||||||
// a system.StatT type pertaining to that file.
|
|
||||||
//
|
|
||||||
// Throws an error if the file does not exist
|
|
||||||
func Stat(path string) (*StatT, error) {
|
|
||||||
s := &syscall.Stat_t{}
|
|
||||||
if err := syscall.Stat(path, s); err != nil {
|
|
||||||
return nil, &os.PathError{Op: "Stat", Path: path, Err: err}
|
|
||||||
}
|
|
||||||
return fromStatT(s)
|
|
||||||
}
|
|
50
vendor/github.com/docker/docker/pkg/system/stat_windows.go
generated
vendored
50
vendor/github.com/docker/docker/pkg/system/stat_windows.go
generated
vendored
@ -1,50 +0,0 @@
|
|||||||
package system // import "github.com/docker/docker/pkg/system"
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// StatT type contains status of a file. It contains metadata
|
|
||||||
// like permission, size, etc about a file.
|
|
||||||
type StatT struct {
|
|
||||||
mode os.FileMode
|
|
||||||
size int64
|
|
||||||
mtim time.Time
|
|
||||||
}
|
|
||||||
|
|
||||||
// Size returns file's size.
|
|
||||||
func (s StatT) Size() int64 {
|
|
||||||
return s.size
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mode returns file's permission mode.
|
|
||||||
func (s StatT) Mode() os.FileMode {
|
|
||||||
return s.mode
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mtim returns file's last modification time.
|
|
||||||
func (s StatT) Mtim() time.Time {
|
|
||||||
return s.mtim
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stat takes a path to a file and returns
|
|
||||||
// a system.StatT type pertaining to that file.
|
|
||||||
//
|
|
||||||
// Throws an error if the file does not exist
|
|
||||||
func Stat(path string) (*StatT, error) {
|
|
||||||
fi, err := os.Stat(path)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return fromStatT(&fi)
|
|
||||||
}
|
|
||||||
|
|
||||||
// fromStatT converts a os.FileInfo type to a system.StatT type
|
|
||||||
func fromStatT(fi *os.FileInfo) (*StatT, error) {
|
|
||||||
return &StatT{
|
|
||||||
size: (*fi).Size(),
|
|
||||||
mode: (*fi).Mode(),
|
|
||||||
mtim: (*fi).ModTime(),
|
|
||||||
}, nil
|
|
||||||
}
|
|
33
vendor/github.com/docker/docker/registry/auth.go
generated
vendored
33
vendor/github.com/docker/docker/registry/auth.go
generated
vendored
@ -66,23 +66,23 @@ func (scs staticCredentialStore) SetRefreshToken(*url.URL, string, string) {
|
|||||||
// loginV2 tries to login to the v2 registry server. The given registry
|
// loginV2 tries to login to the v2 registry server. The given registry
|
||||||
// endpoint will be pinged to get authorization challenges. These challenges
|
// endpoint will be pinged to get authorization challenges. These challenges
|
||||||
// will be used to authenticate against the registry to validate credentials.
|
// will be used to authenticate against the registry to validate credentials.
|
||||||
func loginV2(authConfig *registry.AuthConfig, endpoint APIEndpoint, userAgent string) (string, string, error) {
|
func loginV2(authConfig *registry.AuthConfig, endpoint APIEndpoint, userAgent string) (status string, token string, _ error) {
|
||||||
var (
|
endpointStr := strings.TrimRight(endpoint.URL.String(), "/") + "/v2/"
|
||||||
endpointStr = strings.TrimRight(endpoint.URL.String(), "/") + "/v2/"
|
|
||||||
modifiers = Headers(userAgent, nil)
|
|
||||||
authTransport = transport.NewTransport(newTransport(endpoint.TLSConfig), modifiers...)
|
|
||||||
credentialAuthConfig = *authConfig
|
|
||||||
creds = loginCredentialStore{authConfig: &credentialAuthConfig}
|
|
||||||
)
|
|
||||||
|
|
||||||
log.G(context.TODO()).Debugf("attempting v2 login to registry endpoint %s", endpointStr)
|
log.G(context.TODO()).Debugf("attempting v2 login to registry endpoint %s", endpointStr)
|
||||||
|
|
||||||
loginClient, err := v2AuthHTTPClient(endpoint.URL, authTransport, modifiers, creds, nil)
|
req, err := http.NewRequest(http.MethodGet, endpointStr, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err := http.NewRequest(http.MethodGet, endpointStr, nil)
|
var (
|
||||||
|
modifiers = Headers(userAgent, nil)
|
||||||
|
authTrans = transport.NewTransport(newTransport(endpoint.TLSConfig), modifiers...)
|
||||||
|
credentialAuthConfig = *authConfig
|
||||||
|
creds = loginCredentialStore{authConfig: &credentialAuthConfig}
|
||||||
|
)
|
||||||
|
|
||||||
|
loginClient, err := v2AuthHTTPClient(endpoint.URL, authTrans, modifiers, creds, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
@ -133,12 +133,13 @@ func v2AuthHTTPClient(endpoint *url.URL, authTransport http.RoundTripper, modifi
|
|||||||
// files).
|
// files).
|
||||||
func ConvertToHostname(url string) string {
|
func ConvertToHostname(url string) string {
|
||||||
stripped := url
|
stripped := url
|
||||||
if strings.HasPrefix(url, "http://") {
|
if strings.HasPrefix(stripped, "http://") {
|
||||||
stripped = strings.TrimPrefix(url, "http://")
|
stripped = strings.TrimPrefix(stripped, "http://")
|
||||||
} else if strings.HasPrefix(url, "https://") {
|
} else if strings.HasPrefix(stripped, "https://") {
|
||||||
stripped = strings.TrimPrefix(url, "https://")
|
stripped = strings.TrimPrefix(stripped, "https://")
|
||||||
}
|
}
|
||||||
return strings.SplitN(stripped, "/", 2)[0]
|
stripped, _, _ = strings.Cut(stripped, "/")
|
||||||
|
return stripped
|
||||||
}
|
}
|
||||||
|
|
||||||
// ResolveAuthConfig matches an auth configuration to a server address or a URL
|
// ResolveAuthConfig matches an auth configuration to a server address or a URL
|
||||||
|
74
vendor/github.com/docker/docker/registry/config.go
generated
vendored
74
vendor/github.com/docker/docker/registry/config.go
generated
vendored
@ -15,9 +15,10 @@ import (
|
|||||||
|
|
||||||
// ServiceOptions holds command line options.
|
// ServiceOptions holds command line options.
|
||||||
type ServiceOptions struct {
|
type ServiceOptions struct {
|
||||||
AllowNondistributableArtifacts []string `json:"allow-nondistributable-artifacts,omitempty"`
|
AllowNondistributableArtifacts []string `json:"allow-nondistributable-artifacts,omitempty"` // Deprecated: non-distributable artifacts are deprecated and enabled by default. This field will be removed in the next release.
|
||||||
Mirrors []string `json:"registry-mirrors,omitempty"`
|
|
||||||
InsecureRegistries []string `json:"insecure-registries,omitempty"`
|
Mirrors []string `json:"registry-mirrors,omitempty"`
|
||||||
|
InsecureRegistries []string `json:"insecure-registries,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// serviceConfig holds daemon configuration for the registry service.
|
// serviceConfig holds daemon configuration for the registry service.
|
||||||
@ -80,9 +81,6 @@ func CertsDir() string {
|
|||||||
// newServiceConfig returns a new instance of ServiceConfig
|
// newServiceConfig returns a new instance of ServiceConfig
|
||||||
func newServiceConfig(options ServiceOptions) (*serviceConfig, error) {
|
func newServiceConfig(options ServiceOptions) (*serviceConfig, error) {
|
||||||
config := &serviceConfig{}
|
config := &serviceConfig{}
|
||||||
if err := config.loadAllowNondistributableArtifacts(options.AllowNondistributableArtifacts); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if err := config.loadMirrors(options.Mirrors); err != nil {
|
if err := config.loadMirrors(options.Mirrors); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -100,51 +98,12 @@ func (config *serviceConfig) copy() *registry.ServiceConfig {
|
|||||||
ic[key] = value
|
ic[key] = value
|
||||||
}
|
}
|
||||||
return ®istry.ServiceConfig{
|
return ®istry.ServiceConfig{
|
||||||
AllowNondistributableArtifactsCIDRs: append([]*registry.NetIPNet(nil), config.AllowNondistributableArtifactsCIDRs...),
|
InsecureRegistryCIDRs: append([]*registry.NetIPNet(nil), config.InsecureRegistryCIDRs...),
|
||||||
AllowNondistributableArtifactsHostnames: append([]string(nil), config.AllowNondistributableArtifactsHostnames...),
|
IndexConfigs: ic,
|
||||||
InsecureRegistryCIDRs: append([]*registry.NetIPNet(nil), config.InsecureRegistryCIDRs...),
|
Mirrors: append([]string(nil), config.Mirrors...),
|
||||||
IndexConfigs: ic,
|
|
||||||
Mirrors: append([]string(nil), config.Mirrors...),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// loadAllowNondistributableArtifacts loads allow-nondistributable-artifacts registries into config.
|
|
||||||
func (config *serviceConfig) loadAllowNondistributableArtifacts(registries []string) error {
|
|
||||||
cidrs := map[string]*registry.NetIPNet{}
|
|
||||||
hostnames := map[string]bool{}
|
|
||||||
|
|
||||||
for _, r := range registries {
|
|
||||||
if _, err := ValidateIndexName(r); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if hasScheme(r) {
|
|
||||||
return invalidParamf("allow-nondistributable-artifacts registry %s should not contain '://'", r)
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ipnet, err := net.ParseCIDR(r); err == nil {
|
|
||||||
// Valid CIDR.
|
|
||||||
cidrs[ipnet.String()] = (*registry.NetIPNet)(ipnet)
|
|
||||||
} else if err = validateHostPort(r); err == nil {
|
|
||||||
// Must be `host:port` if not CIDR.
|
|
||||||
hostnames[r] = true
|
|
||||||
} else {
|
|
||||||
return invalidParamWrapf(err, "allow-nondistributable-artifacts registry %s is not valid", r)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
config.AllowNondistributableArtifactsCIDRs = make([]*registry.NetIPNet, 0, len(cidrs))
|
|
||||||
for _, c := range cidrs {
|
|
||||||
config.AllowNondistributableArtifactsCIDRs = append(config.AllowNondistributableArtifactsCIDRs, c)
|
|
||||||
}
|
|
||||||
|
|
||||||
config.AllowNondistributableArtifactsHostnames = make([]string, 0, len(hostnames))
|
|
||||||
for h := range hostnames {
|
|
||||||
config.AllowNondistributableArtifactsHostnames = append(config.AllowNondistributableArtifactsHostnames, h)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// loadMirrors loads mirrors to config, after removing duplicates.
|
// loadMirrors loads mirrors to config, after removing duplicates.
|
||||||
// Returns an error if mirrors contains an invalid mirror.
|
// Returns an error if mirrors contains an invalid mirror.
|
||||||
func (config *serviceConfig) loadMirrors(mirrors []string) error {
|
func (config *serviceConfig) loadMirrors(mirrors []string) error {
|
||||||
@ -242,25 +201,6 @@ skip:
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// allowNondistributableArtifacts returns true if the provided hostname is part of the list of registries
|
|
||||||
// that allow push of nondistributable artifacts.
|
|
||||||
//
|
|
||||||
// The list can contain elements with CIDR notation to specify a whole subnet. If the subnet contains an IP
|
|
||||||
// of the registry specified by hostname, true is returned.
|
|
||||||
//
|
|
||||||
// hostname should be a URL.Host (`host:port` or `host`) where the `host` part can be either a domain name
|
|
||||||
// or an IP address. If it is a domain name, then it will be resolved to IP addresses for matching. If
|
|
||||||
// resolution fails, CIDR matching is not performed.
|
|
||||||
func (config *serviceConfig) allowNondistributableArtifacts(hostname string) bool {
|
|
||||||
for _, h := range config.AllowNondistributableArtifactsHostnames {
|
|
||||||
if h == hostname {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return isCIDRMatch(config.AllowNondistributableArtifactsCIDRs, hostname)
|
|
||||||
}
|
|
||||||
|
|
||||||
// isSecureIndex returns false if the provided indexName is part of the list of insecure registries
|
// isSecureIndex returns false if the provided indexName is part of the list of insecure registries
|
||||||
// Insecure registries accept HTTP and/or accept HTTPS with certificates from unknown CAs.
|
// Insecure registries accept HTTP and/or accept HTTPS with certificates from unknown CAs.
|
||||||
//
|
//
|
||||||
|
23
vendor/github.com/docker/docker/registry/service.go
generated
vendored
23
vendor/github.com/docker/docker/registry/service.go
generated
vendored
@ -68,10 +68,11 @@ func (s *Service) Auth(ctx context.Context, authConfig *registry.AuthConfig, use
|
|||||||
registryHostName = u.Host
|
registryHostName = u.Host
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lookup endpoints for authentication using "LookupPushEndpoints", which
|
// Lookup endpoints for authentication but exclude mirrors to prevent
|
||||||
// excludes mirrors to prevent sending credentials of the upstream registry
|
// sending credentials of the upstream registry to a mirror.
|
||||||
// to a mirror.
|
s.mu.RLock()
|
||||||
endpoints, err := s.LookupPushEndpoints(registryHostName)
|
endpoints, err := s.lookupV2Endpoints(registryHostName, false)
|
||||||
|
s.mu.RUnlock()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", invalidParam(err)
|
return "", "", invalidParam(err)
|
||||||
}
|
}
|
||||||
@ -103,7 +104,7 @@ func (s *Service) ResolveRepository(name reference.Named) (*RepositoryInfo, erro
|
|||||||
type APIEndpoint struct {
|
type APIEndpoint struct {
|
||||||
Mirror bool
|
Mirror bool
|
||||||
URL *url.URL
|
URL *url.URL
|
||||||
AllowNondistributableArtifacts bool
|
AllowNondistributableArtifacts bool // Deprecated: non-distributable artifacts are deprecated and enabled by default. This field will be removed in the next release.
|
||||||
Official bool
|
Official bool
|
||||||
TrimHostname bool // Deprecated: hostname is now trimmed unconditionally for remote names. This field will be removed in the next release.
|
TrimHostname bool // Deprecated: hostname is now trimmed unconditionally for remote names. This field will be removed in the next release.
|
||||||
TLSConfig *tls.Config
|
TLSConfig *tls.Config
|
||||||
@ -115,7 +116,7 @@ func (s *Service) LookupPullEndpoints(hostname string) (endpoints []APIEndpoint,
|
|||||||
s.mu.RLock()
|
s.mu.RLock()
|
||||||
defer s.mu.RUnlock()
|
defer s.mu.RUnlock()
|
||||||
|
|
||||||
return s.lookupV2Endpoints(hostname)
|
return s.lookupV2Endpoints(hostname, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// LookupPushEndpoints creates a list of v2 endpoints to try to push to, in order of preference.
|
// LookupPushEndpoints creates a list of v2 endpoints to try to push to, in order of preference.
|
||||||
@ -124,15 +125,7 @@ func (s *Service) LookupPushEndpoints(hostname string) (endpoints []APIEndpoint,
|
|||||||
s.mu.RLock()
|
s.mu.RLock()
|
||||||
defer s.mu.RUnlock()
|
defer s.mu.RUnlock()
|
||||||
|
|
||||||
allEndpoints, err := s.lookupV2Endpoints(hostname)
|
return s.lookupV2Endpoints(hostname, false)
|
||||||
if err == nil {
|
|
||||||
for _, endpoint := range allEndpoints {
|
|
||||||
if !endpoint.Mirror {
|
|
||||||
endpoints = append(endpoints, endpoint)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return endpoints, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsInsecureRegistry returns true if the registry at given host is configured as
|
// IsInsecureRegistry returns true if the registry at given host is configured as
|
||||||
|
45
vendor/github.com/docker/docker/registry/service_v2.go
generated
vendored
45
vendor/github.com/docker/docker/registry/service_v2.go
generated
vendored
@ -7,34 +7,33 @@ import (
|
|||||||
"github.com/docker/go-connections/tlsconfig"
|
"github.com/docker/go-connections/tlsconfig"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *Service) lookupV2Endpoints(hostname string) (endpoints []APIEndpoint, err error) {
|
func (s *Service) lookupV2Endpoints(hostname string, includeMirrors bool) ([]APIEndpoint, error) {
|
||||||
ana := s.config.allowNondistributableArtifacts(hostname)
|
var endpoints []APIEndpoint
|
||||||
|
|
||||||
if hostname == DefaultNamespace || hostname == IndexHostname {
|
if hostname == DefaultNamespace || hostname == IndexHostname {
|
||||||
for _, mirror := range s.config.Mirrors {
|
if includeMirrors {
|
||||||
if !strings.HasPrefix(mirror, "http://") && !strings.HasPrefix(mirror, "https://") {
|
for _, mirror := range s.config.Mirrors {
|
||||||
mirror = "https://" + mirror
|
if !strings.HasPrefix(mirror, "http://") && !strings.HasPrefix(mirror, "https://") {
|
||||||
|
mirror = "https://" + mirror
|
||||||
|
}
|
||||||
|
mirrorURL, err := url.Parse(mirror)
|
||||||
|
if err != nil {
|
||||||
|
return nil, invalidParam(err)
|
||||||
|
}
|
||||||
|
mirrorTLSConfig, err := newTLSConfig(mirrorURL.Host, s.config.isSecureIndex(mirrorURL.Host))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
endpoints = append(endpoints, APIEndpoint{
|
||||||
|
URL: mirrorURL,
|
||||||
|
Mirror: true,
|
||||||
|
TLSConfig: mirrorTLSConfig,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
mirrorURL, err := url.Parse(mirror)
|
|
||||||
if err != nil {
|
|
||||||
return nil, invalidParam(err)
|
|
||||||
}
|
|
||||||
mirrorTLSConfig, err := newTLSConfig(mirrorURL.Host, s.config.isSecureIndex(mirrorURL.Host))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
endpoints = append(endpoints, APIEndpoint{
|
|
||||||
URL: mirrorURL,
|
|
||||||
Mirror: true,
|
|
||||||
TLSConfig: mirrorTLSConfig,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
endpoints = append(endpoints, APIEndpoint{
|
endpoints = append(endpoints, APIEndpoint{
|
||||||
URL: DefaultV2Registry,
|
URL: DefaultV2Registry,
|
||||||
Official: true,
|
Official: true,
|
||||||
TLSConfig: tlsconfig.ServerDefault(),
|
TLSConfig: tlsconfig.ServerDefault(),
|
||||||
|
|
||||||
AllowNondistributableArtifacts: ana,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
return endpoints, nil
|
return endpoints, nil
|
||||||
@ -52,8 +51,6 @@ func (s *Service) lookupV2Endpoints(hostname string) (endpoints []APIEndpoint, e
|
|||||||
Host: hostname,
|
Host: hostname,
|
||||||
},
|
},
|
||||||
TLSConfig: tlsConfig,
|
TLSConfig: tlsConfig,
|
||||||
|
|
||||||
AllowNondistributableArtifacts: ana,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,8 +62,6 @@ func (s *Service) lookupV2Endpoints(hostname string) (endpoints []APIEndpoint, e
|
|||||||
},
|
},
|
||||||
// used to check if supposed to be secure via InsecureSkipVerify
|
// used to check if supposed to be secure via InsecureSkipVerify
|
||||||
TLSConfig: tlsConfig,
|
TLSConfig: tlsConfig,
|
||||||
|
|
||||||
AllowNondistributableArtifacts: ana,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
@ -55,7 +55,7 @@ github.com/docker/distribution/registry/client/transport
|
|||||||
github.com/docker/distribution/registry/storage/cache
|
github.com/docker/distribution/registry/storage/cache
|
||||||
github.com/docker/distribution/registry/storage/cache/memory
|
github.com/docker/distribution/registry/storage/cache/memory
|
||||||
github.com/docker/distribution/uuid
|
github.com/docker/distribution/uuid
|
||||||
# github.com/docker/docker v27.0.2-0.20241209174241-b249c5ebd214+incompatible
|
# github.com/docker/docker v27.0.2-0.20241220121230-ad6929339acd+incompatible
|
||||||
## explicit
|
## explicit
|
||||||
github.com/docker/docker/api
|
github.com/docker/docker/api
|
||||||
github.com/docker/docker/api/types
|
github.com/docker/docker/api/types
|
||||||
|
Loading…
x
Reference in New Issue
Block a user