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