2015-03-24 23:57:23 -04:00
package client
import (
"fmt"
"runtime"
2015-03-26 23:22:04 +01:00
"github.com/Sirupsen/logrus"
2015-03-24 23:57:23 -04:00
"github.com/docker/docker/api"
"github.com/docker/docker/autogen/dockerversion"
"github.com/docker/docker/engine"
flag "github.com/docker/docker/pkg/mflag"
)
2015-03-25 10:34:41 -07:00
// CmdVersion shows Docker version information.
//
// 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.
//
// Usage: docker version
2015-03-24 23:57:23 -04:00
func ( cli * DockerCli ) CmdVersion ( args ... string ) error {
cmd := cli . Subcmd ( "version" , "" , "Show the Docker version information." , true )
cmd . Require ( flag . Exact , 0 )
2015-03-29 03:22:46 +02:00
cmd . ParseFlags ( args , false )
2015-03-24 23:57:23 -04:00
if dockerversion . VERSION != "" {
fmt . Fprintf ( cli . out , "Client version: %s\n" , dockerversion . VERSION )
}
fmt . Fprintf ( cli . out , "Client API version: %s\n" , api . APIVERSION )
fmt . Fprintf ( cli . out , "Go version (client): %s\n" , runtime . Version ( ) )
if dockerversion . GITCOMMIT != "" {
fmt . Fprintf ( cli . out , "Git commit (client): %s\n" , dockerversion . GITCOMMIT )
}
fmt . Fprintf ( cli . out , "OS/Arch (client): %s/%s\n" , runtime . GOOS , runtime . GOARCH )
2015-01-12 19:56:01 +00:00
body , _ , err := readBody ( cli . call ( "GET" , "/version" , nil , nil ) )
2015-03-24 23:57:23 -04:00
if err != nil {
return err
}
out := engine . NewOutput ( )
remoteVersion , err := out . AddEnv ( )
if err != nil {
2015-03-26 23:22:04 +01:00
logrus . Errorf ( "Error reading remote version: %s" , err )
2015-03-24 23:57:23 -04:00
return err
}
if _ , err := out . Write ( body ) ; err != nil {
2015-03-26 23:22:04 +01:00
logrus . Errorf ( "Error reading remote version: %s" , err )
2015-03-24 23:57:23 -04:00
return err
}
out . Close ( )
fmt . Fprintf ( cli . out , "Server version: %s\n" , remoteVersion . Get ( "Version" ) )
if apiVersion := remoteVersion . Get ( "ApiVersion" ) ; apiVersion != "" {
fmt . Fprintf ( cli . out , "Server API version: %s\n" , apiVersion )
}
fmt . Fprintf ( cli . out , "Go version (server): %s\n" , remoteVersion . Get ( "GoVersion" ) )
fmt . Fprintf ( cli . out , "Git commit (server): %s\n" , remoteVersion . Get ( "GitCommit" ) )
fmt . Fprintf ( cli . out , "OS/Arch (server): %s/%s\n" , remoteVersion . Get ( "Os" ) , remoteVersion . Get ( "Arch" ) )
return nil
}