From 181e60499ff115d9c648f459a2515db16e5a2b04 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Thu, 7 May 2020 12:57:20 +0200 Subject: [PATCH] docker version: add "context" to output This adds the currently selected "docker context" to the output of "docker version", which allows users to see which context is selected to produce the version output, and can be used (for example), to set the prompt to the currently selected context: (in `~/.bashrc`): ```bash function docker_context_prompt() { PS1="context: $(docker version --format='{{.Client.Context}}')> " } PROMPT_COMMAND=docker_context_prompt ``` After reloading the `~/.bashrc`, the prompt now shows the currently selected `docker context`: ```bash $ source ~/.bashrc context: default> docker context create --docker host=unix:///var/run/docker.sock my-context my-context Successfully created context "my-context" context: default> docker context use my-context my-context Current context is now "my-context" context: my-context> docker context use default default Current context is now "default" context: default> ``` Signed-off-by: Sebastiaan van Stijn --- .../testdata/docker-client-version.golden | 1 + cli/command/system/version.go | 3 ++ cli/command/system/version_test.go | 1 + docs/reference/commandline/version.md | 45 +++++++++++++++++++ 4 files changed, 50 insertions(+) diff --git a/cli/command/system/testdata/docker-client-version.golden b/cli/command/system/testdata/docker-client-version.golden index 04cc88a66f..faed505505 100644 --- a/cli/command/system/testdata/docker-client-version.golden +++ b/cli/command/system/testdata/docker-client-version.golden @@ -5,6 +5,7 @@ Client: Git commit: deadbeef Built: Wed May 30 22:21:05 2018 OS/Arch: linux/amd64 + Context: my-context Experimental: true Server: Docker Enterprise Edition (EE) 2.0 diff --git a/cli/command/system/version.go b/cli/command/system/version.go index 62170ca06d..56eac56ab7 100644 --- a/cli/command/system/version.go +++ b/cli/command/system/version.go @@ -32,6 +32,7 @@ Client:{{if ne .Platform.Name ""}} {{.Platform.Name}}{{end}} Git commit: {{.GitCommit}} Built: {{.BuildTime}} OS/Arch: {{.Os}}/{{.Arch}} + Context: {{.Context}} Experimental: {{.Experimental}} {{- end}} @@ -80,6 +81,7 @@ type clientVersion struct { Os string Arch string BuildTime string `json:",omitempty"` + Context string Experimental bool } @@ -147,6 +149,7 @@ func runVersion(dockerCli command.Cli, opts *versionOptions) error { Os: runtime.GOOS, Arch: runtime.GOARCH, Experimental: dockerCli.ClientInfo().HasExperimental, + Context: dockerCli.CurrentContext(), }, } diff --git a/cli/command/system/version_test.go b/cli/command/system/version_test.go index 482c6ce24d..ab18fb1ddc 100644 --- a/cli/command/system/version_test.go +++ b/cli/command/system/version_test.go @@ -41,6 +41,7 @@ func TestVersionAlign(t *testing.T) { Os: "linux", Arch: "amd64", BuildTime: "Wed May 30 22:21:05 2018", + Context: "my-context", Experimental: true, }, Server: &types.Version{}, diff --git a/docs/reference/commandline/version.md b/docs/reference/commandline/version.md index a3abdd0738..fa02281b89 100644 --- a/docs/reference/commandline/version.md +++ b/docs/reference/commandline/version.md @@ -39,6 +39,7 @@ Client: Git commit: afacb8b Built: Wed Mar 11 01:21:11 2020 OS/Arch: darwin/amd64 + Context: default Experimental: true Server: @@ -76,3 +77,47 @@ $ docker version --format '{{json .}}' {"Client":{"Platform":{"Name":"Docker Engine - Community"},"Version":"19.03.8","ApiVersion":"1.40","DefaultAPIVersion":"1.40","GitCommit":"afacb8b","GoVersion":"go1.12.17","Os":"darwin","Arch":"amd64","BuildTime":"Wed Mar 11 01:21:11 2020","Experimental":true},"Server":{"Platform":{"Name":"Docker Engine - Community"},"Components":[{"Name":"Engine","Version":"19.03.8","Details":{"ApiVersion":"1.40","Arch":"amd64","BuildTime":"Wed Mar 11 01:29:16 2020","Experimental":"true","GitCommit":"afacb8b","GoVersion":"go1.12.17","KernelVersion":"4.19.76-linuxkit","MinAPIVersion":"1.12","Os":"linux"}},{"Name":"containerd","Version":"v1.2.13","Details":{"GitCommit":"7ad184331fa3e55e52b890ea95e65ba581ae3429"}},{"Name":"runc","Version":"1.0.0-rc10","Details":{"GitCommit":"dc9208a3303feef5b3839f4323d9beb36df0a9dd"}},{"Name":"docker-init","Version":"0.18.0","Details":{"GitCommit":"fec3683"}}],"Version":"19.03.8","ApiVersion":"1.40","MinAPIVersion":"1.12","GitCommit":"afacb8b","GoVersion":"go1.12.17","Os":"linux","Arch":"amd64","KernelVersion":"4.19.76-linuxkit","Experimental":true,"BuildTime":"2020-03-11T01:29:16.000000000+00:00"}} ``` + +### Print the current context + +The following example prints the currently used [`docker context`](context.md): + +```bash +$ docker version --format='{{.Client.Context}}' +default +``` + +As an example, this output can be used to dynamically change your shell prompt +to indicate your active context. The example below illustrates how this output +could be used when using Bash as your shell. + +Declare a function to obtain the current context in your `~/.bashrc`, and set +this command as your `PROMPT_COMMAND` + +```bash +function docker_context_prompt() { + PS1="context: $(docker version --format='{{.Client.Context}}')> " +} + +PROMPT_COMMAND=docker_context_prompt +``` + +After reloading the `~/.bashrc`, the prompt now shows the currently selected +`docker context`: + +```bash +$ source ~/.bashrc +context: default> docker context create --docker host=unix:///var/run/docker.sock my-context +my-context +Successfully created context "my-context" +context: default> docker context use my-context +my-context +Current context is now "my-context" +context: my-context> docker context use default +default +Current context is now "default" +context: default> +``` + +Refer to the [`docker context` section](context.md) in the command line reference +for more information about `docker context`.