2014-08-01 13:34:06 -04:00
package main
import (
2014-09-08 19:08:28 -04:00
"fmt"
2014-08-01 13:34:06 -04:00
"os"
"path/filepath"
2014-10-21 19:15:26 -04:00
"runtime"
2014-08-01 13:34:06 -04:00
2014-08-11 18:30:01 -04:00
"github.com/docker/docker/opts"
2014-08-01 13:34:06 -04:00
flag "github.com/docker/docker/pkg/mflag"
)
var (
2014-10-10 11:02:04 -04:00
dockerCertPath = os . Getenv ( "DOCKER_CERT_PATH" )
dockerTlsVerify = os . Getenv ( "DOCKER_TLS_VERIFY" ) != ""
2014-08-01 13:34:06 -04:00
)
func init ( ) {
2014-08-04 20:17:23 -04:00
if dockerCertPath == "" {
2014-10-21 19:15:26 -04:00
dockerCertPath = filepath . Join ( getHomeDir ( ) , ".docker" )
2014-08-01 13:34:06 -04:00
}
}
2014-10-21 19:15:26 -04:00
func getHomeDir ( ) string {
if runtime . GOOS == "windows" {
return os . Getenv ( "USERPROFILE" )
}
return os . Getenv ( "HOME" )
}
2015-01-21 11:14:30 -05:00
func getDaemonConfDir ( ) string {
2015-01-22 13:29:15 -05:00
// TODO: update for Windows daemon
2015-01-21 11:14:30 -05:00
if runtime . GOOS == "windows" {
return filepath . Join ( os . Getenv ( "USERPROFILE" ) , ".docker" )
}
return "/etc/docker"
}
2014-08-01 13:34:06 -04:00
var (
2014-08-09 21:18:32 -04:00
flVersion = flag . Bool ( [ ] string { "v" , "-version" } , false , "Print version information and quit" )
flDaemon = flag . Bool ( [ ] string { "d" , "-daemon" } , false , "Enable daemon mode" )
flDebug = flag . Bool ( [ ] string { "D" , "-debug" } , false , "Enable debug mode" )
flSocketGroup = flag . String ( [ ] string { "G" , "-group" } , "docker" , "Group to assign the unix socket specified by -H when running in daemon mode\nuse '' (the empty string) to disable setting of a group" )
2015-01-15 15:19:19 -05:00
flLogLevel = flag . String ( [ ] string { "l" , "-log-level" } , "info" , "Set the logging level (debug, info, warn, error, fatal)" )
2014-08-09 21:18:32 -04:00
flEnableCors = flag . Bool ( [ ] string { "#api-enable-cors" , "-api-enable-cors" } , false , "Enable CORS headers in the remote API" )
2014-11-20 10:29:04 -05:00
flTls = flag . Bool ( [ ] string { "-tls" } , false , "Use TLS; implied by --tlsverify flag" )
2014-10-15 17:14:12 -04:00
flHelp = flag . Bool ( [ ] string { "h" , "-help" } , false , "Print usage" )
2014-10-10 11:02:04 -04:00
flTlsVerify = flag . Bool ( [ ] string { "-tlsverify" } , dockerTlsVerify , "Use TLS and verify the remote (daemon: verify client, client: verify daemon)" )
2014-08-01 13:34:06 -04:00
2014-08-04 20:17:23 -04:00
// these are initialized in init() below since their default values depend on dockerCertPath which isn't fully initialized until init() runs
2014-09-26 17:24:04 -04:00
flTrustKey * string
flCa * string
flCert * string
flKey * string
flHosts [ ] string
2014-08-01 13:34:06 -04:00
)
2015-01-21 11:14:30 -05:00
func setDefaultConfFlag ( flag * string , def string ) {
if * flag == "" {
if * flDaemon {
* flag = filepath . Join ( getDaemonConfDir ( ) , def )
} else {
* flag = filepath . Join ( getHomeDir ( ) , ".docker" , def )
}
}
}
2014-08-01 13:34:06 -04:00
func init ( ) {
2015-01-21 11:14:30 -05:00
var placeholderTrustKey string
// TODO use flag flag.String([]string{"i", "-identity"}, "", "Path to libtrust key file")
flTrustKey = & placeholderTrustKey
2014-09-26 17:24:04 -04:00
2014-08-04 20:17:23 -04:00
flCa = flag . String ( [ ] string { "-tlscacert" } , filepath . Join ( dockerCertPath , defaultCaFile ) , "Trust only remotes providing a certificate signed by the CA given here" )
flCert = flag . String ( [ ] string { "-tlscert" } , filepath . Join ( dockerCertPath , defaultCertFile ) , "Path to TLS certificate file" )
flKey = flag . String ( [ ] string { "-tlskey" } , filepath . Join ( dockerCertPath , defaultKeyFile ) , "Path to TLS key file" )
2014-09-09 13:12:03 -04:00
opts . HostListVar ( & flHosts , [ ] string { "H" , "-host" } , "The socket(s) to bind to in daemon mode or connect to in client mode, specified using one or more tcp://host:port, unix:///path/to/socket, fd://* or fd://socketfd." )
2014-09-08 19:08:28 -04:00
flag . Usage = func ( ) {
2014-10-15 17:14:12 -04:00
fmt . Fprint ( os . Stdout , "Usage: docker [OPTIONS] COMMAND [arg...]\n\nA self-sufficient runtime for linux containers.\n\nOptions:\n" )
2014-09-08 19:08:28 -04:00
2014-10-15 17:14:12 -04:00
flag . CommandLine . SetOutput ( os . Stdout )
2014-09-08 19:08:28 -04:00
flag . PrintDefaults ( )
help := "\nCommands:\n"
for _ , command := range [ ] [ ] string {
{ "attach" , "Attach to a running container" } ,
{ "build" , "Build an image from a Dockerfile" } ,
{ "commit" , "Create a new image from a container's changes" } ,
{ "cp" , "Copy files/folders from a container's filesystem to the host path" } ,
2014-03-10 09:11:23 -04:00
{ "create" , "Create a new container" } ,
2014-09-08 19:08:28 -04:00
{ "diff" , "Inspect changes on a container's filesystem" } ,
{ "events" , "Get real time events from the server" } ,
2014-10-29 21:38:44 -04:00
{ "exec" , "Run a command in a running container" } ,
2014-09-08 19:08:28 -04:00
{ "export" , "Stream the contents of a container as a tar archive" } ,
{ "history" , "Show the history of an image" } ,
{ "images" , "List images" } ,
{ "import" , "Create a new filesystem image from the contents of a tarball" } ,
{ "info" , "Display system-wide information" } ,
2015-01-24 02:05:44 -05:00
{ "inspect" , "Return low-level information on a container or image" } ,
2014-09-08 19:08:28 -04:00
{ "kill" , "Kill a running container" } ,
{ "load" , "Load an image from a tar archive" } ,
{ "login" , "Register or log in to a Docker registry server" } ,
{ "logout" , "Log out from a Docker registry server" } ,
{ "logs" , "Fetch the logs of a container" } ,
{ "port" , "Lookup the public-facing port that is NAT-ed to PRIVATE_PORT" } ,
{ "pause" , "Pause all processes within a container" } ,
{ "ps" , "List containers" } ,
{ "pull" , "Pull an image or a repository from a Docker registry server" } ,
{ "push" , "Push an image or a repository to a Docker registry server" } ,
2014-10-04 22:47:54 -04:00
{ "rename" , "Rename an existing container" } ,
2014-09-08 19:08:28 -04:00
{ "restart" , "Restart a running container" } ,
{ "rm" , "Remove one or more containers" } ,
{ "rmi" , "Remove one or more images" } ,
{ "run" , "Run a command in a new container" } ,
{ "save" , "Save an image to a tar archive" } ,
{ "search" , "Search for an image on the Docker Hub" } ,
{ "start" , "Start a stopped container" } ,
2015-01-21 14:44:23 -05:00
{ "stats" , "Display a live stream of one or more containers' resource usage statistics" } ,
2014-09-08 19:08:28 -04:00
{ "stop" , "Stop a running container" } ,
{ "tag" , "Tag an image into a repository" } ,
{ "top" , "Lookup the running processes of a container" } ,
{ "unpause" , "Unpause a paused container" } ,
{ "version" , "Show the Docker version information" } ,
{ "wait" , "Block until a container stops, then print its exit code" } ,
} {
help += fmt . Sprintf ( " %-10.10s%s\n" , command [ 0 ] , command [ 1 ] )
}
2014-09-08 19:09:16 -04:00
help += "\nRun 'docker COMMAND --help' for more information on a command."
2014-10-15 17:14:12 -04:00
fmt . Fprintf ( os . Stdout , "%s\n" , help )
2014-09-08 19:08:28 -04:00
}
2014-08-01 13:34:06 -04:00
}