@@ -24,6 +24,7 @@ import (
24
24
"os/signal"
25
25
"path/filepath"
26
26
"regexp"
27
+ "runtime"
27
28
28
29
"github.com/docker/compose/v2/pkg/compose"
29
30
"github.com/docker/compose/v2/pkg/utils"
@@ -38,7 +39,13 @@ import (
38
39
var delegatedContextTypes = []string {store .DefaultContextType }
39
40
40
41
// ComDockerCli name of the classic cli binary
41
- const ComDockerCli = "com.docker.cli"
42
+ var ComDockerCli = "com.docker.cli"
43
+
44
+ func init () {
45
+ if runtime .GOOS == "windows" {
46
+ ComDockerCli += ".exe"
47
+ }
48
+ }
42
49
43
50
// ExecIfDefaultCtxType delegates to com.docker.cli if on moby context
44
51
func ExecIfDefaultCtxType (ctx context.Context , root * cobra.Command ) {
@@ -92,16 +99,7 @@ func Exec(root *cobra.Command) {
92
99
93
100
// RunDocker runs a docker command, and forward signals to the shellout command (stops listening to signals when an event is sent to childExit)
94
101
func RunDocker (childExit chan bool , args ... string ) error {
95
- execBinary , err := resolvepath .LookPath (ComDockerCli )
96
- if err != nil {
97
- execBinary = findBinary (ComDockerCli )
98
- if execBinary == "" {
99
- fmt .Fprintln (os .Stderr , err )
100
- fmt .Fprintln (os .Stderr , "Current PATH : " + os .Getenv ("PATH" ))
101
- os .Exit (1 )
102
- }
103
- }
104
- cmd := exec .Command (execBinary , args ... )
102
+ cmd := exec .Command (comDockerCli (), args ... )
105
103
cmd .Stdin = os .Stdin
106
104
cmd .Stdout = os .Stdout
107
105
cmd .Stderr = os .Stderr
@@ -131,6 +129,25 @@ func RunDocker(childExit chan bool, args ...string) error {
131
129
return cmd .Run ()
132
130
}
133
131
132
+ func comDockerCli () string {
133
+ if v := os .Getenv ("DOCKER_COM_DOCKER_CLI" ); v != "" {
134
+ return v
135
+ }
136
+
137
+ execBinary := findBinary (ComDockerCli )
138
+ if execBinary == "" {
139
+ var err error
140
+ execBinary , err = resolvepath .LookPath (ComDockerCli )
141
+ if err != nil {
142
+ fmt .Fprintln (os .Stderr , err )
143
+ fmt .Fprintln (os .Stderr , "Current PATH : " + os .Getenv ("PATH" ))
144
+ os .Exit (1 )
145
+ }
146
+ }
147
+
148
+ return execBinary
149
+ }
150
+
134
151
func findBinary (filename string ) string {
135
152
currentBinaryPath , err := os .Executable ()
136
153
if err != nil {
@@ -149,7 +166,7 @@ func findBinary(filename string) string {
149
166
150
167
// IsDefaultContextCommand checks if the command exists in the classic cli (issues a shellout --help)
151
168
func IsDefaultContextCommand (dockerCommand string ) bool {
152
- cmd := exec .Command (ComDockerCli , dockerCommand , "--help" )
169
+ cmd := exec .Command (comDockerCli () , dockerCommand , "--help" )
153
170
b , e := cmd .CombinedOutput ()
154
171
if e != nil {
155
172
fmt .Println (e )
@@ -162,7 +179,7 @@ func ExecSilent(ctx context.Context, args ...string) ([]byte, error) {
162
179
if len (args ) == 0 {
163
180
args = os .Args [1 :]
164
181
}
165
- cmd := exec .CommandContext (ctx , ComDockerCli , args ... )
182
+ cmd := exec .CommandContext (ctx , comDockerCli () , args ... )
166
183
cmd .Stderr = os .Stderr
167
184
return cmd .Output ()
168
185
}
0 commit comments