2015-03-24 23:57:23 -04:00
package client
import (
2015-04-27 23:11:29 +02:00
"encoding/json"
2015-03-24 23:57:23 -04:00
"fmt"
"runtime"
"github.com/docker/docker/api"
2015-04-27 23:11:29 +02:00
"github.com/docker/docker/api/types"
2015-03-24 23:57:23 -04:00
"github.com/docker/docker/autogen/dockerversion"
flag "github.com/docker/docker/pkg/mflag"
2015-05-28 17:59:07 -07:00
"github.com/docker/docker/utils"
2015-03-24 23:57:23 -04:00
)
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 {
2015-05-13 19:45:01 -07:00
cmd := cli . Subcmd ( "version" , nil , "Show the Docker version information." , true )
2015-03-24 23:57:23 -04:00
cmd . Require ( flag . Exact , 0 )
2015-05-23 08:57:50 -07:00
cmd . ParseFlags ( args , true )
2015-03-24 23:57:23 -04:00
2015-06-19 10:03:13 -07:00
fmt . Println ( "Client:" )
2015-03-24 23:57:23 -04:00
if dockerversion . VERSION != "" {
2015-06-19 10:03:13 -07:00
fmt . Fprintf ( cli . out , " Version: %s\n" , dockerversion . VERSION )
2015-03-24 23:57:23 -04:00
}
2015-06-19 10:03:13 -07:00
fmt . Fprintf ( cli . out , " API version: %s\n" , api . Version )
fmt . Fprintf ( cli . out , " Go version: %s\n" , runtime . Version ( ) )
2015-03-24 23:57:23 -04:00
if dockerversion . GITCOMMIT != "" {
2015-06-19 10:03:13 -07:00
fmt . Fprintf ( cli . out , " Git commit: %s\n" , dockerversion . GITCOMMIT )
2015-03-24 23:57:23 -04:00
}
2015-06-19 10:03:13 -07:00
if dockerversion . BUILDTIME != "" {
fmt . Fprintf ( cli . out , " Built: %s\n" , dockerversion . BUILDTIME )
}
fmt . Fprintf ( cli . out , " OS/Arch: %s/%s\n" , runtime . GOOS , runtime . GOARCH )
2015-05-28 17:59:07 -07:00
if utils . ExperimentalBuild ( ) {
2015-06-19 10:03:13 -07:00
fmt . Fprintf ( cli . out , " Experimental: true\n" )
2015-05-28 17:59:07 -07:00
}
2015-03-24 23:57:23 -04:00
2015-05-13 18:36:36 -07:00
stream , _ , _ , err := cli . call ( "GET" , "/version" , nil , nil )
2015-03-24 23:57:23 -04:00
if err != nil {
return err
}
2015-04-27 23:11:29 +02:00
var v types . Version
if err := json . NewDecoder ( stream ) . Decode ( & v ) ; err != nil {
2015-05-09 11:33:06 -07:00
fmt . Fprintf ( cli . err , "Error reading remote version: %s\n" , err )
2015-03-24 23:57:23 -04:00
return err
}
2015-04-27 23:11:29 +02:00
2015-06-19 10:03:13 -07:00
fmt . Println ( "\nServer:" )
fmt . Fprintf ( cli . out , " Version: %s\n" , v . Version )
2015-04-27 23:11:29 +02:00
if v . ApiVersion != "" {
2015-06-19 10:03:13 -07:00
fmt . Fprintf ( cli . out , " API version: %s\n" , v . ApiVersion )
}
fmt . Fprintf ( cli . out , " Go version: %s\n" , v . GoVersion )
fmt . Fprintf ( cli . out , " Git commit: %s\n" , v . GitCommit )
if len ( v . BuildTime ) > 0 {
fmt . Fprintf ( cli . out , " Built: %s\n" , v . BuildTime )
2015-03-24 23:57:23 -04:00
}
2015-06-19 10:03:13 -07:00
fmt . Fprintf ( cli . out , " OS/Arch: %s/%s\n" , v . Os , v . Arch )
2015-05-28 17:59:07 -07:00
if v . Experimental {
2015-06-19 10:03:13 -07:00
fmt . Fprintf ( cli . out , " Experimental: true\n" )
2015-05-28 17:59:07 -07:00
}
2015-06-19 10:03:13 -07:00
fmt . Fprintf ( cli . out , "\n" )
2015-03-24 23:57:23 -04:00
return nil
}