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-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-05-23 08:57:50 -07:00
cmd . ParseFlags ( args , true )
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-04-27 23:11:29 +02: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
fmt . Fprintf ( cli . out , "Server version: %s\n" , v . Version )
if v . ApiVersion != "" {
fmt . Fprintf ( cli . out , "Server API version: %s\n" , v . ApiVersion )
2015-03-24 23:57:23 -04:00
}
2015-04-27 23:11:29 +02:00
fmt . Fprintf ( cli . out , "Go version (server): %s\n" , v . GoVersion )
fmt . Fprintf ( cli . out , "Git commit (server): %s\n" , v . GitCommit )
fmt . Fprintf ( cli . out , "OS/Arch (server): %s/%s\n" , v . Os , v . Arch )
2015-03-24 23:57:23 -04:00
return nil
}