2016-11-11 11:02:23 -05:00
// +build !windows
2018-02-05 16:05:59 -05:00
package daemon // import "github.com/docker/docker/daemon"
2016-11-11 11:02:23 -05:00
import (
2017-11-02 20:21:18 -04:00
"context"
2018-07-19 07:45:32 -04:00
"fmt"
2016-11-11 11:02:23 -05:00
"os/exec"
Add containerd, runc, and docker-init versions to /version
This patch adds version information about the containerd,
runc, and docker-init components to the /version endpoint.
With this patch applied, running:
```
curl --unix-socket /var/run/docker.sock http://localhost/version | jq .
```
Will produce this response:
```json
{
"Platform": {
"Name": ""
},
"Components": [
{
"Name": "Engine",
"Version": "dev",
"Details": {
"ApiVersion": "1.40",
"Arch": "amd64",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00",
"Experimental": "false",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"KernelVersion": "4.9.93-linuxkit-aufs",
"MinAPIVersion": "1.12",
"Os": "linux"
}
},
{
"Name": "containerd",
"Version": "v1.1.4",
"Details": {
"GitCommit": "9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b"
}
},
{
"Name": "runc",
"Version": "1.0.0-rc5+dev",
"Details": {
"GitCommit": "a00bf0190895aa465a5fbed0268888e2c8ddfe85"
}
},
{
"Name": "docker-init",
"Version": "0.18.0",
"Details": {
"GitCommit": "fec3683"
}
}
],
"Version": "dev",
"ApiVersion": "1.40",
"MinAPIVersion": "1.12",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"Os": "linux",
"Arch": "amd64",
"KernelVersion": "4.9.93-linuxkit-aufs",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00"
}
```
When using a recent version of the CLI, that information is included in the
output of `docker version`:
```
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:46:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: dev
API version: 1.40 (minimum version 1.12)
Go version: go1.11.2
Git commit: 7d02782d2f
Built: Thu Nov 8 10:23:42 2018
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.1.4
GitCommit: 9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b
runc:
Version: 1.0.0-rc5+dev
GitCommit: a00bf0190895aa465a5fbed0268888e2c8ddfe85
docker-init:
Version: 0.18.0
GitCommit: fec3683
```
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2018-10-05 06:30:10 -04:00
"path/filepath"
2016-11-11 11:02:23 -05:00
"strings"
"github.com/docker/docker/api/types"
2019-03-14 23:44:18 -04:00
containertypes "github.com/docker/docker/api/types/container"
2016-11-11 11:02:23 -05:00
"github.com/docker/docker/pkg/sysinfo"
2017-03-29 07:44:14 -04:00
"github.com/pkg/errors"
2017-07-26 17:42:13 -04:00
"github.com/sirupsen/logrus"
2016-11-11 11:02:23 -05:00
)
2018-07-13 07:14:45 -04:00
// fillPlatformInfo fills the platform related info.
func ( daemon * Daemon ) fillPlatformInfo ( v * types . Info , sysInfo * sysinfo . SysInfo ) {
2020-03-10 08:09:25 -04:00
v . CgroupDriver = daemon . getCgroupDriver ( )
v . CgroupVersion = "1"
if sysInfo . CgroupUnified {
v . CgroupVersion = "2"
}
2021-03-16 03:17:22 -04:00
if v . CgroupDriver != cgroupNoneDriver {
v . MemoryLimit = sysInfo . MemoryLimit
v . SwapLimit = sysInfo . SwapLimit
v . KernelMemory = sysInfo . KernelMemory
v . KernelMemoryTCP = sysInfo . KernelMemoryTCP
v . OomKillDisable = sysInfo . OomKillDisable
v . CPUCfsPeriod = sysInfo . CPUCfs
v . CPUCfsQuota = sysInfo . CPUCfs
v . CPUShares = sysInfo . CPUShares
v . CPUSet = sysInfo . Cpuset
v . PidsLimit = sysInfo . PidsLimit
}
2016-11-11 11:02:23 -05:00
v . Runtimes = daemon . configStore . GetAllRuntimes ( )
v . DefaultRuntime = daemon . configStore . GetDefaultRuntimeName ( )
v . InitBinary = daemon . configStore . GetInitPath ( )
2021-08-23 07:19:31 -04:00
v . RuncCommit . ID = "N/A"
v . ContainerdCommit . ID = "N/A"
v . InitCommit . ID = "N/A"
2016-11-11 11:02:23 -05:00
2017-09-22 09:52:41 -04:00
defaultRuntimeBinary := daemon . configStore . GetRuntime ( v . DefaultRuntime ) . Path
2017-06-09 21:07:21 -04:00
if rv , err := exec . Command ( defaultRuntimeBinary , "--version" ) . Output ( ) ; err == nil {
2019-09-15 11:15:27 -04:00
if _ , _ , commit , err := parseRuntimeVersion ( string ( rv ) ) ; err != nil {
Add containerd, runc, and docker-init versions to /version
This patch adds version information about the containerd,
runc, and docker-init components to the /version endpoint.
With this patch applied, running:
```
curl --unix-socket /var/run/docker.sock http://localhost/version | jq .
```
Will produce this response:
```json
{
"Platform": {
"Name": ""
},
"Components": [
{
"Name": "Engine",
"Version": "dev",
"Details": {
"ApiVersion": "1.40",
"Arch": "amd64",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00",
"Experimental": "false",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"KernelVersion": "4.9.93-linuxkit-aufs",
"MinAPIVersion": "1.12",
"Os": "linux"
}
},
{
"Name": "containerd",
"Version": "v1.1.4",
"Details": {
"GitCommit": "9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b"
}
},
{
"Name": "runc",
"Version": "1.0.0-rc5+dev",
"Details": {
"GitCommit": "a00bf0190895aa465a5fbed0268888e2c8ddfe85"
}
},
{
"Name": "docker-init",
"Version": "0.18.0",
"Details": {
"GitCommit": "fec3683"
}
}
],
"Version": "dev",
"ApiVersion": "1.40",
"MinAPIVersion": "1.12",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"Os": "linux",
"Arch": "amd64",
"KernelVersion": "4.9.93-linuxkit-aufs",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00"
}
```
When using a recent version of the CLI, that information is included in the
output of `docker version`:
```
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:46:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: dev
API version: 1.40 (minimum version 1.12)
Go version: go1.11.2
Git commit: 7d02782d2f
Built: Thu Nov 8 10:23:42 2018
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.1.4
GitCommit: 9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b
runc:
Version: 1.0.0-rc5+dev
GitCommit: a00bf0190895aa465a5fbed0268888e2c8ddfe85
docker-init:
Version: 0.18.0
GitCommit: fec3683
```
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2018-10-05 06:30:10 -04:00
logrus . Warnf ( "failed to parse %s version: %v" , defaultRuntimeBinary , err )
} else {
v . RuncCommit . ID = commit
2016-11-11 11:02:23 -05:00
}
} else {
2017-06-06 13:36:24 -04:00
logrus . Warnf ( "failed to retrieve %s version: %v" , defaultRuntimeBinary , err )
2016-11-11 11:02:23 -05:00
}
2017-11-02 20:21:18 -04:00
if rv , err := daemon . containerd . Version ( context . Background ( ) ) ; err == nil {
v . ContainerdCommit . ID = rv . Revision
2017-09-22 09:52:41 -04:00
} else {
2017-11-02 20:21:18 -04:00
logrus . Warnf ( "failed to retrieve containerd version: %v" , err )
2017-09-22 09:52:41 -04:00
}
2017-06-06 13:36:24 -04:00
defaultInitBinary := daemon . configStore . GetInitPath ( )
if rv , err := exec . Command ( defaultInitBinary , "--version" ) . Output ( ) ; err == nil {
Add containerd, runc, and docker-init versions to /version
This patch adds version information about the containerd,
runc, and docker-init components to the /version endpoint.
With this patch applied, running:
```
curl --unix-socket /var/run/docker.sock http://localhost/version | jq .
```
Will produce this response:
```json
{
"Platform": {
"Name": ""
},
"Components": [
{
"Name": "Engine",
"Version": "dev",
"Details": {
"ApiVersion": "1.40",
"Arch": "amd64",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00",
"Experimental": "false",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"KernelVersion": "4.9.93-linuxkit-aufs",
"MinAPIVersion": "1.12",
"Os": "linux"
}
},
{
"Name": "containerd",
"Version": "v1.1.4",
"Details": {
"GitCommit": "9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b"
}
},
{
"Name": "runc",
"Version": "1.0.0-rc5+dev",
"Details": {
"GitCommit": "a00bf0190895aa465a5fbed0268888e2c8ddfe85"
}
},
{
"Name": "docker-init",
"Version": "0.18.0",
"Details": {
"GitCommit": "fec3683"
}
}
],
"Version": "dev",
"ApiVersion": "1.40",
"MinAPIVersion": "1.12",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"Os": "linux",
"Arch": "amd64",
"KernelVersion": "4.9.93-linuxkit-aufs",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00"
}
```
When using a recent version of the CLI, that information is included in the
output of `docker version`:
```
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:46:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: dev
API version: 1.40 (minimum version 1.12)
Go version: go1.11.2
Git commit: 7d02782d2f
Built: Thu Nov 8 10:23:42 2018
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.1.4
GitCommit: 9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b
runc:
Version: 1.0.0-rc5+dev
GitCommit: a00bf0190895aa465a5fbed0268888e2c8ddfe85
docker-init:
Version: 0.18.0
GitCommit: fec3683
```
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2018-10-05 06:30:10 -04:00
if _ , commit , err := parseInitVersion ( string ( rv ) ) ; err != nil {
logrus . Warnf ( "failed to parse %s version: %s" , defaultInitBinary , err )
} else {
v . InitCommit . ID = commit
2016-11-11 11:02:23 -05:00
}
} else {
2017-06-06 13:36:24 -04:00
logrus . Warnf ( "failed to retrieve %s version: %s" , defaultInitBinary , err )
2016-11-11 11:02:23 -05:00
}
2018-07-19 07:45:32 -04:00
2021-08-23 07:19:31 -04:00
// Set expected and actual commits to the same value to prevent the client
// showing that the version does not match the "expected" version/commit.
v . RuncCommit . Expected = v . RuncCommit . ID
v . ContainerdCommit . Expected = v . ContainerdCommit . ID
v . InitCommit . Expected = v . InitCommit . ID
2020-03-10 08:09:25 -04:00
if v . CgroupDriver == cgroupNoneDriver {
if v . CgroupVersion == "2" {
2020-06-26 04:57:03 -04:00
v . Warnings = append ( v . Warnings , "WARNING: Running in rootless-mode without cgroups. Systemd is required to enable cgroups in rootless-mode." )
2020-03-10 08:09:25 -04:00
} else {
2020-06-26 04:57:03 -04:00
v . Warnings = append ( v . Warnings , "WARNING: Running in rootless-mode without cgroups. To enable cgroups in rootless-mode, you need to boot the system in cgroup v2 mode." )
2020-03-10 08:09:25 -04:00
}
} else {
if ! v . MemoryLimit {
v . Warnings = append ( v . Warnings , "WARNING: No memory limit support" )
}
if ! v . SwapLimit {
v . Warnings = append ( v . Warnings , "WARNING: No swap limit support" )
}
2021-01-19 01:07:08 -05:00
if ! v . KernelMemoryTCP && v . CgroupVersion == "1" {
// kernel memory is not available for cgroup v2.
// Warning is not printed on cgroup v2, because there is no action user can take.
2020-03-10 08:09:25 -04:00
v . Warnings = append ( v . Warnings , "WARNING: No kernel memory TCP limit support" )
}
2021-01-19 01:07:08 -05:00
if ! v . OomKillDisable && v . CgroupVersion == "1" {
// oom kill disable is not available for cgroup v2.
// Warning is not printed on cgroup v2, because there is no action user can take.
2020-03-10 08:09:25 -04:00
v . Warnings = append ( v . Warnings , "WARNING: No oom kill disable support" )
}
if ! v . CPUCfsQuota {
v . Warnings = append ( v . Warnings , "WARNING: No cpu cfs quota support" )
}
if ! v . CPUCfsPeriod {
v . Warnings = append ( v . Warnings , "WARNING: No cpu cfs period support" )
}
if ! v . CPUShares {
v . Warnings = append ( v . Warnings , "WARNING: No cpu shares support" )
}
if ! v . CPUSet {
v . Warnings = append ( v . Warnings , "WARNING: No cpuset support" )
}
2020-06-08 11:16:01 -04:00
// TODO add fields for these options in types.Info
2021-01-19 01:07:08 -05:00
if ! sysInfo . BlkioWeight && v . CgroupVersion == "2" {
// blkio weight is not available on cgroup v1 since kernel 5.0.
// Warning is not printed on cgroup v1, because there is no action user can take.
// On cgroup v2, blkio weight is implemented using io.weight
2021-01-19 23:42:32 -05:00
v . Warnings = append ( v . Warnings , "WARNING: No io.weight support" )
2020-06-08 11:16:01 -04:00
}
2021-01-19 01:07:08 -05:00
if ! sysInfo . BlkioWeightDevice && v . CgroupVersion == "2" {
2021-01-19 23:42:32 -05:00
v . Warnings = append ( v . Warnings , "WARNING: No io.weight (per device) support" )
2020-06-08 11:16:01 -04:00
}
if ! sysInfo . BlkioReadBpsDevice {
2021-01-19 23:42:32 -05:00
if v . CgroupVersion == "2" {
v . Warnings = append ( v . Warnings , "WARNING: No io.max (rbps) support" )
} else {
v . Warnings = append ( v . Warnings , "WARNING: No blkio throttle.read_bps_device support" )
}
2020-06-08 11:16:01 -04:00
}
if ! sysInfo . BlkioWriteBpsDevice {
2021-01-19 23:42:32 -05:00
if v . CgroupVersion == "2" {
v . Warnings = append ( v . Warnings , "WARNING: No io.max (wbps) support" )
} else {
v . Warnings = append ( v . Warnings , "WARNING: No blkio throttle.write_bps_device support" )
}
2020-06-08 11:16:01 -04:00
}
if ! sysInfo . BlkioReadIOpsDevice {
2021-01-19 23:42:32 -05:00
if v . CgroupVersion == "2" {
v . Warnings = append ( v . Warnings , "WARNING: No io.max (riops) support" )
} else {
v . Warnings = append ( v . Warnings , "WARNING: No blkio throttle.read_iops_device support" )
}
2020-06-08 11:16:01 -04:00
}
if ! sysInfo . BlkioWriteIOpsDevice {
2021-01-19 23:42:32 -05:00
if v . CgroupVersion == "2" {
v . Warnings = append ( v . Warnings , "WARNING: No io.max (wiops) support" )
} else {
v . Warnings = append ( v . Warnings , "WARNING: No blkio throttle.write_iops_device support" )
}
2020-06-08 11:16:01 -04:00
}
2018-07-19 07:45:32 -04:00
}
if ! v . IPv4Forwarding {
v . Warnings = append ( v . Warnings , "WARNING: IPv4 forwarding is disabled" )
}
if ! v . BridgeNfIptables {
v . Warnings = append ( v . Warnings , "WARNING: bridge-nf-call-iptables is disabled" )
}
if ! v . BridgeNfIP6tables {
v . Warnings = append ( v . Warnings , "WARNING: bridge-nf-call-ip6tables is disabled" )
}
}
Add containerd, runc, and docker-init versions to /version
This patch adds version information about the containerd,
runc, and docker-init components to the /version endpoint.
With this patch applied, running:
```
curl --unix-socket /var/run/docker.sock http://localhost/version | jq .
```
Will produce this response:
```json
{
"Platform": {
"Name": ""
},
"Components": [
{
"Name": "Engine",
"Version": "dev",
"Details": {
"ApiVersion": "1.40",
"Arch": "amd64",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00",
"Experimental": "false",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"KernelVersion": "4.9.93-linuxkit-aufs",
"MinAPIVersion": "1.12",
"Os": "linux"
}
},
{
"Name": "containerd",
"Version": "v1.1.4",
"Details": {
"GitCommit": "9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b"
}
},
{
"Name": "runc",
"Version": "1.0.0-rc5+dev",
"Details": {
"GitCommit": "a00bf0190895aa465a5fbed0268888e2c8ddfe85"
}
},
{
"Name": "docker-init",
"Version": "0.18.0",
"Details": {
"GitCommit": "fec3683"
}
}
],
"Version": "dev",
"ApiVersion": "1.40",
"MinAPIVersion": "1.12",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"Os": "linux",
"Arch": "amd64",
"KernelVersion": "4.9.93-linuxkit-aufs",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00"
}
```
When using a recent version of the CLI, that information is included in the
output of `docker version`:
```
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:46:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: dev
API version: 1.40 (minimum version 1.12)
Go version: go1.11.2
Git commit: 7d02782d2f
Built: Thu Nov 8 10:23:42 2018
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.1.4
GitCommit: 9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b
runc:
Version: 1.0.0-rc5+dev
GitCommit: a00bf0190895aa465a5fbed0268888e2c8ddfe85
docker-init:
Version: 0.18.0
GitCommit: fec3683
```
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2018-10-05 06:30:10 -04:00
func ( daemon * Daemon ) fillPlatformVersion ( v * types . Version ) {
if rv , err := daemon . containerd . Version ( context . Background ( ) ) ; err == nil {
v . Components = append ( v . Components , types . ComponentVersion {
Name : "containerd" ,
Version : rv . Version ,
Details : map [ string ] string {
"GitCommit" : rv . Revision ,
} ,
} )
}
defaultRuntime := daemon . configStore . GetDefaultRuntimeName ( )
defaultRuntimeBinary := daemon . configStore . GetRuntime ( defaultRuntime ) . Path
if rv , err := exec . Command ( defaultRuntimeBinary , "--version" ) . Output ( ) ; err == nil {
2019-09-15 11:15:27 -04:00
if _ , ver , commit , err := parseRuntimeVersion ( string ( rv ) ) ; err != nil {
Add containerd, runc, and docker-init versions to /version
This patch adds version information about the containerd,
runc, and docker-init components to the /version endpoint.
With this patch applied, running:
```
curl --unix-socket /var/run/docker.sock http://localhost/version | jq .
```
Will produce this response:
```json
{
"Platform": {
"Name": ""
},
"Components": [
{
"Name": "Engine",
"Version": "dev",
"Details": {
"ApiVersion": "1.40",
"Arch": "amd64",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00",
"Experimental": "false",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"KernelVersion": "4.9.93-linuxkit-aufs",
"MinAPIVersion": "1.12",
"Os": "linux"
}
},
{
"Name": "containerd",
"Version": "v1.1.4",
"Details": {
"GitCommit": "9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b"
}
},
{
"Name": "runc",
"Version": "1.0.0-rc5+dev",
"Details": {
"GitCommit": "a00bf0190895aa465a5fbed0268888e2c8ddfe85"
}
},
{
"Name": "docker-init",
"Version": "0.18.0",
"Details": {
"GitCommit": "fec3683"
}
}
],
"Version": "dev",
"ApiVersion": "1.40",
"MinAPIVersion": "1.12",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"Os": "linux",
"Arch": "amd64",
"KernelVersion": "4.9.93-linuxkit-aufs",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00"
}
```
When using a recent version of the CLI, that information is included in the
output of `docker version`:
```
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:46:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: dev
API version: 1.40 (minimum version 1.12)
Go version: go1.11.2
Git commit: 7d02782d2f
Built: Thu Nov 8 10:23:42 2018
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.1.4
GitCommit: 9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b
runc:
Version: 1.0.0-rc5+dev
GitCommit: a00bf0190895aa465a5fbed0268888e2c8ddfe85
docker-init:
Version: 0.18.0
GitCommit: fec3683
```
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2018-10-05 06:30:10 -04:00
logrus . Warnf ( "failed to parse %s version: %v" , defaultRuntimeBinary , err )
} else {
v . Components = append ( v . Components , types . ComponentVersion {
Name : defaultRuntime ,
Version : ver ,
Details : map [ string ] string {
"GitCommit" : commit ,
} ,
} )
}
} else {
logrus . Warnf ( "failed to retrieve %s version: %v" , defaultRuntimeBinary , err )
}
defaultInitBinary := daemon . configStore . GetInitPath ( )
if rv , err := exec . Command ( defaultInitBinary , "--version" ) . Output ( ) ; err == nil {
if ver , commit , err := parseInitVersion ( string ( rv ) ) ; err != nil {
logrus . Warnf ( "failed to parse %s version: %s" , defaultInitBinary , err )
} else {
v . Components = append ( v . Components , types . ComponentVersion {
Name : filepath . Base ( defaultInitBinary ) ,
Version : ver ,
Details : map [ string ] string {
"GitCommit" : commit ,
} ,
} )
}
} else {
logrus . Warnf ( "failed to retrieve %s version: %s" , defaultInitBinary , err )
}
}
2018-07-19 07:45:32 -04:00
func fillDriverWarnings ( v * types . Info ) {
for _ , pair := range v . DriverStatus {
if pair [ 0 ] == "Data loop file" {
msg := fmt . Sprintf ( "WARNING: %s: usage of loopback devices is " +
"strongly discouraged for production use.\n " +
"Use `--storage-opt dm.thinpooldev` to specify a custom block storage device." , v . Driver )
v . Warnings = append ( v . Warnings , msg )
continue
}
if pair [ 0 ] == "Supports d_type" && pair [ 1 ] == "false" {
backingFs := getBackingFs ( v )
msg := fmt . Sprintf ( "WARNING: %s: the backing %s filesystem is formatted without d_type support, which leads to incorrect behavior.\n" , v . Driver , backingFs )
if backingFs == "xfs" {
msg += " Reformat the filesystem with ftype=1 to enable d_type support.\n"
}
msg += " Running without d_type support will not be supported in future releases."
v . Warnings = append ( v . Warnings , msg )
continue
}
}
}
func getBackingFs ( v * types . Info ) string {
for _ , pair := range v . DriverStatus {
if pair [ 0 ] == "Backing Filesystem" {
return pair [ 1 ]
}
}
return ""
2016-11-11 11:02:23 -05:00
}
2017-03-29 07:44:14 -04:00
Add containerd, runc, and docker-init versions to /version
This patch adds version information about the containerd,
runc, and docker-init components to the /version endpoint.
With this patch applied, running:
```
curl --unix-socket /var/run/docker.sock http://localhost/version | jq .
```
Will produce this response:
```json
{
"Platform": {
"Name": ""
},
"Components": [
{
"Name": "Engine",
"Version": "dev",
"Details": {
"ApiVersion": "1.40",
"Arch": "amd64",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00",
"Experimental": "false",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"KernelVersion": "4.9.93-linuxkit-aufs",
"MinAPIVersion": "1.12",
"Os": "linux"
}
},
{
"Name": "containerd",
"Version": "v1.1.4",
"Details": {
"GitCommit": "9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b"
}
},
{
"Name": "runc",
"Version": "1.0.0-rc5+dev",
"Details": {
"GitCommit": "a00bf0190895aa465a5fbed0268888e2c8ddfe85"
}
},
{
"Name": "docker-init",
"Version": "0.18.0",
"Details": {
"GitCommit": "fec3683"
}
}
],
"Version": "dev",
"ApiVersion": "1.40",
"MinAPIVersion": "1.12",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"Os": "linux",
"Arch": "amd64",
"KernelVersion": "4.9.93-linuxkit-aufs",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00"
}
```
When using a recent version of the CLI, that information is included in the
output of `docker version`:
```
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:46:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: dev
API version: 1.40 (minimum version 1.12)
Go version: go1.11.2
Git commit: 7d02782d2f
Built: Thu Nov 8 10:23:42 2018
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.1.4
GitCommit: 9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b
runc:
Version: 1.0.0-rc5+dev
GitCommit: a00bf0190895aa465a5fbed0268888e2c8ddfe85
docker-init:
Version: 0.18.0
GitCommit: fec3683
```
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2018-10-05 06:30:10 -04:00
// parseInitVersion parses a Tini version string, and extracts the "version"
// and "git commit" from the output.
//
// Output example from `docker-init --version`:
//
// tini version 0.18.0 - git.fec3683
func parseInitVersion ( v string ) ( version string , commit string , err error ) {
2019-10-15 21:33:48 -04:00
parts := strings . Split ( v , " - " )
2017-03-29 07:44:14 -04:00
if len ( parts ) >= 2 {
2019-10-15 21:33:48 -04:00
gitParts := strings . Split ( strings . TrimSpace ( parts [ 1 ] ) , "." )
2017-03-29 07:44:14 -04:00
if len ( gitParts ) == 2 && gitParts [ 0 ] == "git" {
Add containerd, runc, and docker-init versions to /version
This patch adds version information about the containerd,
runc, and docker-init components to the /version endpoint.
With this patch applied, running:
```
curl --unix-socket /var/run/docker.sock http://localhost/version | jq .
```
Will produce this response:
```json
{
"Platform": {
"Name": ""
},
"Components": [
{
"Name": "Engine",
"Version": "dev",
"Details": {
"ApiVersion": "1.40",
"Arch": "amd64",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00",
"Experimental": "false",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"KernelVersion": "4.9.93-linuxkit-aufs",
"MinAPIVersion": "1.12",
"Os": "linux"
}
},
{
"Name": "containerd",
"Version": "v1.1.4",
"Details": {
"GitCommit": "9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b"
}
},
{
"Name": "runc",
"Version": "1.0.0-rc5+dev",
"Details": {
"GitCommit": "a00bf0190895aa465a5fbed0268888e2c8ddfe85"
}
},
{
"Name": "docker-init",
"Version": "0.18.0",
"Details": {
"GitCommit": "fec3683"
}
}
],
"Version": "dev",
"ApiVersion": "1.40",
"MinAPIVersion": "1.12",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"Os": "linux",
"Arch": "amd64",
"KernelVersion": "4.9.93-linuxkit-aufs",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00"
}
```
When using a recent version of the CLI, that information is included in the
output of `docker version`:
```
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:46:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: dev
API version: 1.40 (minimum version 1.12)
Go version: go1.11.2
Git commit: 7d02782d2f
Built: Thu Nov 8 10:23:42 2018
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.1.4
GitCommit: 9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b
runc:
Version: 1.0.0-rc5+dev
GitCommit: a00bf0190895aa465a5fbed0268888e2c8ddfe85
docker-init:
Version: 0.18.0
GitCommit: fec3683
```
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2018-10-05 06:30:10 -04:00
commit = gitParts [ 1 ]
2017-03-29 07:44:14 -04:00
}
}
2019-10-15 21:33:48 -04:00
parts [ 0 ] = strings . TrimSpace ( parts [ 0 ] )
Add containerd, runc, and docker-init versions to /version
This patch adds version information about the containerd,
runc, and docker-init components to the /version endpoint.
With this patch applied, running:
```
curl --unix-socket /var/run/docker.sock http://localhost/version | jq .
```
Will produce this response:
```json
{
"Platform": {
"Name": ""
},
"Components": [
{
"Name": "Engine",
"Version": "dev",
"Details": {
"ApiVersion": "1.40",
"Arch": "amd64",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00",
"Experimental": "false",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"KernelVersion": "4.9.93-linuxkit-aufs",
"MinAPIVersion": "1.12",
"Os": "linux"
}
},
{
"Name": "containerd",
"Version": "v1.1.4",
"Details": {
"GitCommit": "9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b"
}
},
{
"Name": "runc",
"Version": "1.0.0-rc5+dev",
"Details": {
"GitCommit": "a00bf0190895aa465a5fbed0268888e2c8ddfe85"
}
},
{
"Name": "docker-init",
"Version": "0.18.0",
"Details": {
"GitCommit": "fec3683"
}
}
],
"Version": "dev",
"ApiVersion": "1.40",
"MinAPIVersion": "1.12",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"Os": "linux",
"Arch": "amd64",
"KernelVersion": "4.9.93-linuxkit-aufs",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00"
}
```
When using a recent version of the CLI, that information is included in the
output of `docker version`:
```
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:46:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: dev
API version: 1.40 (minimum version 1.12)
Go version: go1.11.2
Git commit: 7d02782d2f
Built: Thu Nov 8 10:23:42 2018
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.1.4
GitCommit: 9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b
runc:
Version: 1.0.0-rc5+dev
GitCommit: a00bf0190895aa465a5fbed0268888e2c8ddfe85
docker-init:
Version: 0.18.0
GitCommit: fec3683
```
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2018-10-05 06:30:10 -04:00
if strings . HasPrefix ( parts [ 0 ] , "tini version " ) {
version = strings . TrimPrefix ( parts [ 0 ] , "tini version " )
}
if version == "" && commit == "" {
err = errors . Errorf ( "unknown output format: %s" , v )
}
return version , commit , err
}
2019-09-15 11:15:27 -04:00
// parseRuntimeVersion parses the output of `[runtime] --version` and extracts the
// "name", "version" and "git commit" from the output.
Add containerd, runc, and docker-init versions to /version
This patch adds version information about the containerd,
runc, and docker-init components to the /version endpoint.
With this patch applied, running:
```
curl --unix-socket /var/run/docker.sock http://localhost/version | jq .
```
Will produce this response:
```json
{
"Platform": {
"Name": ""
},
"Components": [
{
"Name": "Engine",
"Version": "dev",
"Details": {
"ApiVersion": "1.40",
"Arch": "amd64",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00",
"Experimental": "false",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"KernelVersion": "4.9.93-linuxkit-aufs",
"MinAPIVersion": "1.12",
"Os": "linux"
}
},
{
"Name": "containerd",
"Version": "v1.1.4",
"Details": {
"GitCommit": "9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b"
}
},
{
"Name": "runc",
"Version": "1.0.0-rc5+dev",
"Details": {
"GitCommit": "a00bf0190895aa465a5fbed0268888e2c8ddfe85"
}
},
{
"Name": "docker-init",
"Version": "0.18.0",
"Details": {
"GitCommit": "fec3683"
}
}
],
"Version": "dev",
"ApiVersion": "1.40",
"MinAPIVersion": "1.12",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"Os": "linux",
"Arch": "amd64",
"KernelVersion": "4.9.93-linuxkit-aufs",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00"
}
```
When using a recent version of the CLI, that information is included in the
output of `docker version`:
```
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:46:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: dev
API version: 1.40 (minimum version 1.12)
Go version: go1.11.2
Git commit: 7d02782d2f
Built: Thu Nov 8 10:23:42 2018
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.1.4
GitCommit: 9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b
runc:
Version: 1.0.0-rc5+dev
GitCommit: a00bf0190895aa465a5fbed0268888e2c8ddfe85
docker-init:
Version: 0.18.0
GitCommit: fec3683
```
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2018-10-05 06:30:10 -04:00
//
// Output example from `runc --version`:
//
// runc version 1.0.0-rc5+dev
// commit: 69663f0bd4b60df09991c08812a60108003fa340
// spec: 1.0.0
2019-09-15 11:15:27 -04:00
func parseRuntimeVersion ( v string ) ( runtime string , version string , commit string , err error ) {
Add containerd, runc, and docker-init versions to /version
This patch adds version information about the containerd,
runc, and docker-init components to the /version endpoint.
With this patch applied, running:
```
curl --unix-socket /var/run/docker.sock http://localhost/version | jq .
```
Will produce this response:
```json
{
"Platform": {
"Name": ""
},
"Components": [
{
"Name": "Engine",
"Version": "dev",
"Details": {
"ApiVersion": "1.40",
"Arch": "amd64",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00",
"Experimental": "false",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"KernelVersion": "4.9.93-linuxkit-aufs",
"MinAPIVersion": "1.12",
"Os": "linux"
}
},
{
"Name": "containerd",
"Version": "v1.1.4",
"Details": {
"GitCommit": "9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b"
}
},
{
"Name": "runc",
"Version": "1.0.0-rc5+dev",
"Details": {
"GitCommit": "a00bf0190895aa465a5fbed0268888e2c8ddfe85"
}
},
{
"Name": "docker-init",
"Version": "0.18.0",
"Details": {
"GitCommit": "fec3683"
}
}
],
"Version": "dev",
"ApiVersion": "1.40",
"MinAPIVersion": "1.12",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"Os": "linux",
"Arch": "amd64",
"KernelVersion": "4.9.93-linuxkit-aufs",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00"
}
```
When using a recent version of the CLI, that information is included in the
output of `docker version`:
```
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:46:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: dev
API version: 1.40 (minimum version 1.12)
Go version: go1.11.2
Git commit: 7d02782d2f
Built: Thu Nov 8 10:23:42 2018
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.1.4
GitCommit: 9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b
runc:
Version: 1.0.0-rc5+dev
GitCommit: a00bf0190895aa465a5fbed0268888e2c8ddfe85
docker-init:
Version: 0.18.0
GitCommit: fec3683
```
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2018-10-05 06:30:10 -04:00
lines := strings . Split ( strings . TrimSpace ( v ) , "\n" )
for _ , line := range lines {
2019-09-16 20:13:01 -04:00
if strings . Contains ( line , "version" ) {
s := strings . Split ( line , "version" )
2019-09-15 11:15:27 -04:00
runtime = strings . TrimSpace ( s [ 0 ] )
2019-09-16 20:13:01 -04:00
version = strings . TrimSpace ( s [ len ( s ) - 1 ] )
Add containerd, runc, and docker-init versions to /version
This patch adds version information about the containerd,
runc, and docker-init components to the /version endpoint.
With this patch applied, running:
```
curl --unix-socket /var/run/docker.sock http://localhost/version | jq .
```
Will produce this response:
```json
{
"Platform": {
"Name": ""
},
"Components": [
{
"Name": "Engine",
"Version": "dev",
"Details": {
"ApiVersion": "1.40",
"Arch": "amd64",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00",
"Experimental": "false",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"KernelVersion": "4.9.93-linuxkit-aufs",
"MinAPIVersion": "1.12",
"Os": "linux"
}
},
{
"Name": "containerd",
"Version": "v1.1.4",
"Details": {
"GitCommit": "9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b"
}
},
{
"Name": "runc",
"Version": "1.0.0-rc5+dev",
"Details": {
"GitCommit": "a00bf0190895aa465a5fbed0268888e2c8ddfe85"
}
},
{
"Name": "docker-init",
"Version": "0.18.0",
"Details": {
"GitCommit": "fec3683"
}
}
],
"Version": "dev",
"ApiVersion": "1.40",
"MinAPIVersion": "1.12",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"Os": "linux",
"Arch": "amd64",
"KernelVersion": "4.9.93-linuxkit-aufs",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00"
}
```
When using a recent version of the CLI, that information is included in the
output of `docker version`:
```
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:46:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: dev
API version: 1.40 (minimum version 1.12)
Go version: go1.11.2
Git commit: 7d02782d2f
Built: Thu Nov 8 10:23:42 2018
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.1.4
GitCommit: 9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b
runc:
Version: 1.0.0-rc5+dev
GitCommit: a00bf0190895aa465a5fbed0268888e2c8ddfe85
docker-init:
Version: 0.18.0
GitCommit: fec3683
```
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2018-10-05 06:30:10 -04:00
continue
}
if strings . HasPrefix ( line , "commit:" ) {
commit = strings . TrimSpace ( strings . TrimPrefix ( line , "commit:" ) )
continue
}
2017-03-29 07:44:14 -04:00
}
Add containerd, runc, and docker-init versions to /version
This patch adds version information about the containerd,
runc, and docker-init components to the /version endpoint.
With this patch applied, running:
```
curl --unix-socket /var/run/docker.sock http://localhost/version | jq .
```
Will produce this response:
```json
{
"Platform": {
"Name": ""
},
"Components": [
{
"Name": "Engine",
"Version": "dev",
"Details": {
"ApiVersion": "1.40",
"Arch": "amd64",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00",
"Experimental": "false",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"KernelVersion": "4.9.93-linuxkit-aufs",
"MinAPIVersion": "1.12",
"Os": "linux"
}
},
{
"Name": "containerd",
"Version": "v1.1.4",
"Details": {
"GitCommit": "9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b"
}
},
{
"Name": "runc",
"Version": "1.0.0-rc5+dev",
"Details": {
"GitCommit": "a00bf0190895aa465a5fbed0268888e2c8ddfe85"
}
},
{
"Name": "docker-init",
"Version": "0.18.0",
"Details": {
"GitCommit": "fec3683"
}
}
],
"Version": "dev",
"ApiVersion": "1.40",
"MinAPIVersion": "1.12",
"GitCommit": "7d02782d2f",
"GoVersion": "go1.11.2",
"Os": "linux",
"Arch": "amd64",
"KernelVersion": "4.9.93-linuxkit-aufs",
"BuildTime": "2018-11-08T10:23:42.000000000+00:00"
}
```
When using a recent version of the CLI, that information is included in the
output of `docker version`:
```
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:46:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: dev
API version: 1.40 (minimum version 1.12)
Go version: go1.11.2
Git commit: 7d02782d2f
Built: Thu Nov 8 10:23:42 2018
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.1.4
GitCommit: 9f2e07b1fc1342d1c48fe4d7bbb94cb6d1bf278b
runc:
Version: 1.0.0-rc5+dev
GitCommit: a00bf0190895aa465a5fbed0268888e2c8ddfe85
docker-init:
Version: 0.18.0
GitCommit: fec3683
```
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2018-10-05 06:30:10 -04:00
if version == "" && commit == "" {
err = errors . Errorf ( "unknown output format: %s" , v )
2017-03-29 07:44:14 -04:00
}
2019-09-15 11:15:27 -04:00
return runtime , version , commit , err
2017-03-29 07:44:14 -04:00
}
2018-10-15 03:52:53 -04:00
2019-03-14 23:44:18 -04:00
func ( daemon * Daemon ) cgroupNamespacesEnabled ( sysInfo * sysinfo . SysInfo ) bool {
return sysInfo . CgroupNamespaces && containertypes . CgroupnsMode ( daemon . configStore . CgroupNamespaceMode ) . IsPrivate ( )
}
2019-02-28 03:12:55 -05:00
// Rootless returns true if daemon is running in rootless mode
func ( daemon * Daemon ) Rootless ( ) bool {
2018-10-15 03:52:53 -04:00
return daemon . configStore . Rootless
}