@@ -30,6 +30,7 @@ import (
3030
3131 "github.com/spf13/cobra"
3232 "k8s.io/klog/v2"
33+
3334 "k8s.io/minikube/pkg/drivers/kic/oci"
3435 "k8s.io/minikube/pkg/minikube/command"
3536 "k8s.io/minikube/pkg/minikube/constants"
@@ -43,7 +44,31 @@ import (
4344 "k8s.io/minikube/pkg/minikube/sysinit"
4445)
4546
46- var dockerEnvTmpl = fmt .Sprintf ("{{ .Prefix }}%s{{ .Delimiter }}{{ .DockerTLSVerify }}{{ .Suffix }}{{ .Prefix }}%s{{ .Delimiter }}{{ .DockerHost }}{{ .Suffix }}{{ .Prefix }}%s{{ .Delimiter }}{{ .DockerCertPath }}{{ .Suffix }}{{ .Prefix }}%s{{ .Delimiter }}{{ .MinikubeDockerdProfile }}{{ .Suffix }}{{ if .NoProxyVar }}{{ .Prefix }}{{ .NoProxyVar }}{{ .Delimiter }}{{ .NoProxyValue }}{{ .Suffix }}{{end}}{{ .UsageHint }}" , constants .DockerTLSVerifyEnv , constants .DockerHostEnv , constants .DockerCertPathEnv , constants .MinikubeActiveDockerdEnv )
47+ var dockerSetEnvTmpl = fmt .Sprintf (
48+ "{{ .Prefix }}%s{{ .Delimiter }}{{ .DockerTLSVerify }}{{ .Suffix }}" +
49+ "{{ .Prefix }}%s{{ .Delimiter }}{{ .DockerHost }}{{ .Suffix }}" +
50+ "{{ .Prefix }}%s{{ .Delimiter }}{{ .DockerCertPath }}{{ .Suffix }}" +
51+ "{{ if .ExistingDockerTLSVerify }}" +
52+ "{{ .Prefix }}%s{{ .Delimiter }}{{ .ExistingDockerTLSVerify }}{{ .Suffix }}" +
53+ "{{ end }}" +
54+ "{{ if .ExistingDockerHost }}" +
55+ "{{ .Prefix }}%s{{ .Delimiter }}{{ .ExistingDockerHost }}{{ .Suffix }}" +
56+ "{{ end }}" +
57+ "{{ if .ExistingDockerCertPath }}" +
58+ "{{ .Prefix }}%s{{ .Delimiter }}{{ .ExistingDockerCertPath }}{{ .Suffix }}" +
59+ "{{ end }}" +
60+ "{{ .Prefix }}%s{{ .Delimiter }}{{ .MinikubeDockerdProfile }}{{ .Suffix }}" +
61+ "{{ if .NoProxyVar }}" +
62+ "{{ .Prefix }}{{ .NoProxyVar }}{{ .Delimiter }}{{ .NoProxyValue }}{{ .Suffix }}" +
63+ "{{ end }}" +
64+ "{{ .UsageHint }}" ,
65+ constants .DockerTLSVerifyEnv ,
66+ constants .DockerHostEnv ,
67+ constants .DockerCertPathEnv ,
68+ constants .ExistingDockerTLSVerifyEnv ,
69+ constants .ExistingDockerHostEnv ,
70+ constants .ExistingDockerCertPathEnv ,
71+ constants .MinikubeActiveDockerdEnv )
4772
4873// DockerShellConfig represents the shell config for Docker
4974type DockerShellConfig struct {
@@ -54,6 +79,10 @@ type DockerShellConfig struct {
5479 MinikubeDockerdProfile string
5580 NoProxyVar string
5681 NoProxyValue string
82+
83+ ExistingDockerCertPath string
84+ ExistingDockerHost string
85+ ExistingDockerTLSVerify string
5786}
5887
5988var (
@@ -81,6 +110,11 @@ func dockerShellCfgSet(ec DockerEnvConfig, envMap map[string]string) *DockerShel
81110 s .DockerCertPath = envMap [constants .DockerCertPathEnv ]
82111 s .DockerHost = envMap [constants .DockerHostEnv ]
83112 s .DockerTLSVerify = envMap [constants .DockerTLSVerifyEnv ]
113+
114+ s .ExistingDockerCertPath = envMap [constants .ExistingDockerCertPathEnv ]
115+ s .ExistingDockerHost = envMap [constants .ExistingDockerHostEnv ]
116+ s .ExistingDockerTLSVerify = envMap [constants .ExistingDockerTLSVerifyEnv ]
117+
84118 s .MinikubeDockerdProfile = envMap [constants .MinikubeActiveDockerdEnv ]
85119
86120 if ec .noProxy {
@@ -134,8 +168,17 @@ var dockerEnvCmd = &cobra.Command{
134168 Short : "Configure environment to use minikube's Docker daemon" ,
135169 Long : `Sets up docker env variables; similar to '$(docker-machine env)'.` ,
136170 Run : func (cmd * cobra.Command , args []string ) {
171+ var err error
172+
173+ shl := shell .ForceShell
174+ if shl == "" {
175+ shl , err = shell .Detect ()
176+ if err != nil {
177+ exit .Error (reason .InternalShellDetect , "Error detecting shell" , err )
178+ }
179+ }
137180 sh := shell.EnvConfig {
138- Shell : shell . ForceShell ,
181+ Shell : shl ,
139182 }
140183
141184 if dockerUnset {
@@ -167,7 +210,6 @@ var dockerEnvCmd = &cobra.Command{
167210 mustRestartDocker (cname , co .CP .Runner )
168211 }
169212
170- var err error
171213 port := constants .DockerDaemonPort
172214 if driver .NeedsPortForward (driverName ) {
173215 port , err = oci .ForwardedPort (driverName , cname , port )
@@ -186,13 +228,6 @@ var dockerEnvCmd = &cobra.Command{
186228 noProxy : noProxy ,
187229 }
188230
189- if ec .Shell == "" {
190- ec .Shell , err = shell .Detect ()
191- if err != nil {
192- exit .Error (reason .InternalShellDetect , "Error detecting shell" , err )
193- }
194- }
195-
196231 dockerPath , err := exec .LookPath ("docker" )
197232 if err != nil {
198233 klog .Warningf ("Unable to find docker in path - skipping connectivity check: %v" , err )
@@ -228,7 +263,7 @@ type DockerEnvConfig struct {
228263// dockerSetScript writes out a shell-compatible 'docker-env' script
229264func dockerSetScript (ec DockerEnvConfig , w io.Writer ) error {
230265 envVars := dockerEnvVars (ec )
231- return shell .SetScript (ec .EnvConfig , w , dockerEnvTmpl , dockerShellCfgSet (ec , envVars ))
266+ return shell .SetScript (ec .EnvConfig , w , dockerSetEnvTmpl , dockerShellCfgSet (ec , envVars ))
232267}
233268
234269// dockerSetScript writes out a shell-compatible 'docker-env unset' script
@@ -246,7 +281,6 @@ func dockerUnsetScript(ec DockerEnvConfig, w io.Writer) error {
246281 vars = append (vars , k )
247282 }
248283 }
249-
250284 return shell .UnsetScript (ec .EnvConfig , w , vars )
251285}
252286
@@ -257,14 +291,21 @@ func dockerURL(ip string, port int) string {
257291
258292// dockerEnvVars gets the necessary docker env variables to allow the use of minikube's docker daemon
259293func dockerEnvVars (ec DockerEnvConfig ) map [string ]string {
260- env := map [string ]string {
294+ rt := map [string ]string {
261295 constants .DockerTLSVerifyEnv : "1" ,
262296 constants .DockerHostEnv : dockerURL (ec .hostIP , ec .port ),
263297 constants .DockerCertPathEnv : ec .certsDir ,
264298 constants .MinikubeActiveDockerdEnv : ec .profile ,
265299 }
266-
267- return env
300+ if os .Getenv (constants .MinikubeActiveDockerdEnv ) == "" {
301+ for _ , env := range constants .DockerDaemonEnvs {
302+ if v := oci .InitialEnv (env ); v != "" {
303+ key := constants .MinikubeExistingPrefix + env
304+ rt [key ] = v
305+ }
306+ }
307+ }
308+ return rt
268309}
269310
270311// dockerEnvVarsList gets the necessary docker env variables to allow the use of minikube's docker daemon to be used in a exec.Command
0 commit comments