44# --------------------------------------------------------------------------------------------
55
66import re
7+ import json
78from knack .util import CLIError
89from knack .log import get_logger
910from .custom import get_docker_command
@@ -73,11 +74,11 @@ def _subprocess_communicate(command_parts, shell=False):
7374
7475
7576# Checks for the environment
76- # Checks docker command, docker daemon, docker version and docker pull
77+ # Checks container command, daemon, version and image pull
7778def _get_docker_status_and_version (ignore_errors , yes ):
7879 from ._errors import DOCKER_DAEMON_ERROR , DOCKER_PULL_ERROR , DOCKER_VERSION_ERROR
7980
80- # Docker command and docker daemon check
81+ # Container command and daemon check
8182 docker_command , error = get_docker_command (is_diagnostics_context = True )
8283 docker_daemon_available = True
8384
@@ -88,18 +89,31 @@ def _get_docker_status_and_version(ignore_errors, yes):
8889 docker_daemon_available = False
8990
9091 if docker_daemon_available :
91- logger .warning ("Docker daemon status: available" )
92+ logger .warning ("%s daemon status: available" , docker_command . title () )
9293
9394 # Docker version check
94- output , warning , stderr , succeeded = _subprocess_communicate (
95- [docker_command , "version" , "--format" , "'Docker version {{.Server.Version}}, "
96- "build {{.Server.GitCommit}}, platform {{.Server.Os}}/{{.Server.Arch}}'" ])
95+ output , warning , stderr , succeeded = _subprocess_communicate ([docker_command , "version" , "--format" , "json" ])
9796 if not succeeded :
9897 _handle_error (DOCKER_VERSION_ERROR .append_error_message (stderr ), ignore_errors )
9998 else :
10099 if warning :
101100 logger .warning (warning )
102- logger .warning ("Docker version: %s" , output )
101+ try :
102+ json_output = json .loads (output ).get ("Client" )
103+ except json .decoder .JSONDecodeError :
104+ json_output = {}
105+ version = json_output .get ("Version" , "unknown" )
106+ commit = json_output .get ("GitCommit" , "unknown" )[:7 ]
107+ if docker_command == "docker" :
108+ os = json_output .get ("Os" , "unknown" )
109+ arch = json_output .get ("Arch" , "unknown" )
110+ else :
111+ try :
112+ os , arch = json_output .get ("OsArch" , "unknown" ).split ("/" )
113+ except ValueError :
114+ os = "unknown"
115+ arch = "unknown"
116+ logger .warning ("%s version: %s, build %s, platform %s/%s" , docker_command .title (), version , commit , os , arch )
103117
104118 # Docker pull check - only if docker daemon is available
105119 if docker_daemon_available :
@@ -114,14 +128,14 @@ def _get_docker_status_and_version(ignore_errors, yes):
114128
115129 if not succeeded :
116130 if stderr and DOCKER_PULL_WRONG_PLATFORM in stderr :
117- print_pass ("Docker pull of '{}'". format ( IMAGE ) )
131+ print_pass (f" { docker_command . title () } pull of '{ IMAGE } '" )
118132 logger .warning ("Image '%s' can be pulled but cannot be used on this platform" , IMAGE )
119133 return
120134 _handle_error (DOCKER_PULL_ERROR .append_error_message (stderr ), ignore_errors )
121135 else :
122136 if warning :
123137 logger .warning (warning )
124- print_pass ("Docker pull of '{}'". format ( IMAGE ) )
138+ print_pass (f" { docker_command . title () } pull of '{ IMAGE } '" )
125139
126140
127141# Get current CLI version
0 commit comments