github.com/boynux/docker@v1.11.0-rc4/api/client/version.go (about) 1 package client 2 3 import ( 4 "runtime" 5 "text/template" 6 "time" 7 8 "golang.org/x/net/context" 9 10 Cli "github.com/docker/docker/cli" 11 "github.com/docker/docker/dockerversion" 12 flag "github.com/docker/docker/pkg/mflag" 13 "github.com/docker/docker/utils" 14 "github.com/docker/docker/utils/templates" 15 "github.com/docker/engine-api/types" 16 ) 17 18 var versionTemplate = `Client: 19 Version: {{.Client.Version}} 20 API version: {{.Client.APIVersion}} 21 Go version: {{.Client.GoVersion}} 22 Git commit: {{.Client.GitCommit}} 23 Built: {{.Client.BuildTime}} 24 OS/Arch: {{.Client.Os}}/{{.Client.Arch}}{{if .Client.Experimental}} 25 Experimental: {{.Client.Experimental}}{{end}}{{if .ServerOK}} 26 27 Server: 28 Version: {{.Server.Version}} 29 API version: {{.Server.APIVersion}} 30 Go version: {{.Server.GoVersion}} 31 Git commit: {{.Server.GitCommit}} 32 Built: {{.Server.BuildTime}} 33 OS/Arch: {{.Server.Os}}/{{.Server.Arch}}{{if .Server.Experimental}} 34 Experimental: {{.Server.Experimental}}{{end}}{{end}}` 35 36 // CmdVersion shows Docker version information. 37 // 38 // Available version information is shown for: client Docker version, client API version, client Go version, client Git commit, client OS/Arch, server Docker version, server API version, server Go version, server Git commit, and server OS/Arch. 39 // 40 // Usage: docker version 41 func (cli *DockerCli) CmdVersion(args ...string) (err error) { 42 cmd := Cli.Subcmd("version", nil, Cli.DockerCommands["version"].Description, true) 43 tmplStr := cmd.String([]string{"f", "#format", "-format"}, "", "Format the output using the given go template") 44 cmd.Require(flag.Exact, 0) 45 46 cmd.ParseFlags(args, true) 47 48 templateFormat := versionTemplate 49 if *tmplStr != "" { 50 templateFormat = *tmplStr 51 } 52 53 var tmpl *template.Template 54 if tmpl, err = templates.Parse(templateFormat); err != nil { 55 return Cli.StatusError{StatusCode: 64, 56 Status: "Template parsing error: " + err.Error()} 57 } 58 59 vd := types.VersionResponse{ 60 Client: &types.Version{ 61 Version: dockerversion.Version, 62 APIVersion: cli.client.ClientVersion(), 63 GoVersion: runtime.Version(), 64 GitCommit: dockerversion.GitCommit, 65 BuildTime: dockerversion.BuildTime, 66 Os: runtime.GOOS, 67 Arch: runtime.GOARCH, 68 Experimental: utils.ExperimentalBuild(), 69 }, 70 } 71 72 serverVersion, err := cli.client.ServerVersion(context.Background()) 73 if err == nil { 74 vd.Server = &serverVersion 75 } 76 77 // first we need to make BuildTime more human friendly 78 t, errTime := time.Parse(time.RFC3339Nano, vd.Client.BuildTime) 79 if errTime == nil { 80 vd.Client.BuildTime = t.Format(time.ANSIC) 81 } 82 83 if vd.ServerOK() { 84 t, errTime = time.Parse(time.RFC3339Nano, vd.Server.BuildTime) 85 if errTime == nil { 86 vd.Server.BuildTime = t.Format(time.ANSIC) 87 } 88 } 89 90 if err2 := tmpl.Execute(cli.out, vd); err2 != nil && err == nil { 91 err = err2 92 } 93 cli.out.Write([]byte{'\n'}) 94 return err 95 }