Skip to content

Commit 8b39f56

Browse files
authored
Merge pull request #9510 from ilya-zuyev/gh_9463_non_dev_dockerhost
Support non-default docker endpoints
2 parents f2e88b4 + 76c62af commit 8b39f56

File tree

17 files changed

+416
-79
lines changed

17 files changed

+416
-79
lines changed

Diff for: cmd/minikube/cmd/docker-env.go

+56-15
Original file line numberDiff line numberDiff line change
@@ -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
4974
type 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

5988
var (
@@ -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
229264
func 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
259293
func 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

Diff for: cmd/minikube/cmd/docker-env_test.go

+40-9
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,10 @@ export MINIKUBE_ACTIVE_DOCKERD="dockerdriver"
5252
# To point your shell to minikube's docker-daemon, run:
5353
# eval $(minikube -p dockerdriver docker-env)
5454
`,
55-
`unset DOCKER_TLS_VERIFY DOCKER_HOST DOCKER_CERT_PATH MINIKUBE_ACTIVE_DOCKERD
55+
`unset DOCKER_TLS_VERIFY;
56+
unset DOCKER_HOST;
57+
unset DOCKER_CERT_PATH;
58+
unset MINIKUBE_ACTIVE_DOCKERD;
5659
`,
5760
},
5861
{
@@ -67,7 +70,10 @@ export MINIKUBE_ACTIVE_DOCKERD="bash"
6770
# To point your shell to minikube's docker-daemon, run:
6871
# eval $(minikube -p bash docker-env)
6972
`,
70-
`unset DOCKER_TLS_VERIFY DOCKER_HOST DOCKER_CERT_PATH MINIKUBE_ACTIVE_DOCKERD
73+
`unset DOCKER_TLS_VERIFY;
74+
unset DOCKER_HOST;
75+
unset DOCKER_CERT_PATH;
76+
unset MINIKUBE_ACTIVE_DOCKERD;
7177
`,
7278
},
7379
{
@@ -82,7 +88,10 @@ export MINIKUBE_ACTIVE_DOCKERD="ipv6"
8288
# To point your shell to minikube's docker-daemon, run:
8389
# eval $(minikube -p ipv6 docker-env)
8490
`,
85-
`unset DOCKER_TLS_VERIFY DOCKER_HOST DOCKER_CERT_PATH MINIKUBE_ACTIVE_DOCKERD
91+
`unset DOCKER_TLS_VERIFY;
92+
unset DOCKER_HOST;
93+
unset DOCKER_CERT_PATH;
94+
unset MINIKUBE_ACTIVE_DOCKERD;
8695
`,
8796
},
8897
{
@@ -115,7 +124,10 @@ $Env:MINIKUBE_ACTIVE_DOCKERD = "powershell"
115124
# & minikube -p powershell docker-env | Invoke-Expression
116125
`,
117126

118-
`Remove-Item Env:\\DOCKER_TLS_VERIFY Env:\\DOCKER_HOST Env:\\DOCKER_CERT_PATH Env:\\MINIKUBE_ACTIVE_DOCKERD
127+
`Remove-Item Env:\\DOCKER_TLS_VERIFY
128+
Remove-Item Env:\\DOCKER_HOST
129+
Remove-Item Env:\\DOCKER_CERT_PATH
130+
Remove-Item Env:\\MINIKUBE_ACTIVE_DOCKERD
119131
`,
120132
},
121133
{
@@ -167,7 +179,11 @@ export NO_PROXY="127.0.0.1"
167179
# eval $(minikube -p bash-no-proxy docker-env)
168180
`,
169181

170-
`unset DOCKER_TLS_VERIFY DOCKER_HOST DOCKER_CERT_PATH MINIKUBE_ACTIVE_DOCKERD NO_PROXY
182+
`unset DOCKER_TLS_VERIFY;
183+
unset DOCKER_HOST;
184+
unset DOCKER_CERT_PATH;
185+
unset MINIKUBE_ACTIVE_DOCKERD;
186+
unset NO_PROXY;
171187
`,
172188
},
173189
{
@@ -184,7 +200,11 @@ export no_proxy="127.0.0.1"
184200
# eval $(minikube -p bash-no-proxy-lower docker-env)
185201
`,
186202

187-
`unset DOCKER_TLS_VERIFY DOCKER_HOST DOCKER_CERT_PATH MINIKUBE_ACTIVE_DOCKERD no_proxy
203+
`unset DOCKER_TLS_VERIFY;
204+
unset DOCKER_HOST;
205+
unset DOCKER_CERT_PATH;
206+
unset MINIKUBE_ACTIVE_DOCKERD;
207+
unset no_proxy;
188208
`,
189209
},
190210
{
@@ -200,7 +220,11 @@ $Env:no_proxy = "192.168.0.1"
200220
# & minikube -p powershell-no-proxy-idempotent docker-env | Invoke-Expression
201221
`,
202222

203-
`Remove-Item Env:\\DOCKER_TLS_VERIFY Env:\\DOCKER_HOST Env:\\DOCKER_CERT_PATH Env:\\MINIKUBE_ACTIVE_DOCKERD Env:\\no_proxy
223+
`Remove-Item Env:\\DOCKER_TLS_VERIFY
224+
Remove-Item Env:\\DOCKER_HOST
225+
Remove-Item Env:\\DOCKER_CERT_PATH
226+
Remove-Item Env:\\MINIKUBE_ACTIVE_DOCKERD
227+
Remove-Item Env:\\no_proxy
204228
`,
205229
},
206230
{
@@ -217,7 +241,11 @@ export NO_PROXY="192.168.0.1,10.0.0.4,127.0.0.1"
217241
# eval $(minikube -p sh-no-proxy-add docker-env)
218242
`,
219243

220-
`unset DOCKER_TLS_VERIFY DOCKER_HOST DOCKER_CERT_PATH MINIKUBE_ACTIVE_DOCKERD NO_PROXY
244+
`unset DOCKER_TLS_VERIFY;
245+
unset DOCKER_HOST;
246+
unset DOCKER_CERT_PATH;
247+
unset MINIKUBE_ACTIVE_DOCKERD;
248+
unset NO_PROXY;
221249
`,
222250
},
223251
{
@@ -229,7 +257,10 @@ DOCKER_HOST=tcp://127.0.0.1:32842
229257
DOCKER_CERT_PATH=/certs
230258
MINIKUBE_ACTIVE_DOCKERD=noneshell
231259
`,
232-
`DOCKER_TLS_VERIFY DOCKER_HOST DOCKER_CERT_PATH MINIKUBE_ACTIVE_DOCKERD
260+
`DOCKER_TLS_VERIFY
261+
DOCKER_HOST
262+
DOCKER_CERT_PATH
263+
MINIKUBE_ACTIVE_DOCKERD
233264
`,
234265
},
235266
}

Diff for: cmd/minikube/cmd/podman-env_test.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ export MINIKUBE_ACTIVE_PODMAN="bash"
4949
# To point your shell to minikube's podman service, run:
5050
# eval $(minikube -p bash podman-env)
5151
`,
52-
`unset PODMAN_VARLINK_BRIDGE MINIKUBE_ACTIVE_PODMAN
52+
`unset PODMAN_VARLINK_BRIDGE;
53+
unset MINIKUBE_ACTIVE_PODMAN;
5354
`,
5455
},
5556
{
@@ -62,7 +63,9 @@ export MINIKUBE_ACTIVE_PODMAN="bash"
6263
# To point your shell to minikube's podman service, run:
6364
# eval $(minikube -p bash podman-env)
6465
`,
65-
`unset CONTAINER_HOST CONTAINER_SSHKEY MINIKUBE_ACTIVE_PODMAN
66+
`unset CONTAINER_HOST;
67+
unset CONTAINER_SSHKEY;
68+
unset MINIKUBE_ACTIVE_PODMAN;
6669
`,
6770
},
6871
}

Diff for: pkg/drivers/kic/kic.go

+18-9
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"github.com/docker/machine/libmachine/state"
3131
"github.com/pkg/errors"
3232
"k8s.io/klog/v2"
33+
3334
pkgdrivers "k8s.io/minikube/pkg/drivers"
3435
"k8s.io/minikube/pkg/drivers/kic/oci"
3536
"k8s.io/minikube/pkg/minikube/assets"
@@ -93,22 +94,30 @@ func (d *Driver) Create() error {
9394
klog.Infof("calculated static IP %q for the %q container", ip.String(), d.NodeConfig.MachineName)
9495
params.IP = ip.String()
9596
}
97+
drv := d.DriverName()
98+
listAddr := oci.DefaultBindIPV4
99+
if oci.IsExternalDaemonHost(drv) {
100+
out.WarningT("Listening to 0.0.0.0 on external docker host {{.host}}. Please be advised",
101+
out.V{"host": oci.DaemonHost(drv)})
102+
listAddr = "0.0.0.0"
103+
}
96104

97105
// control plane specific options
98-
params.PortMappings = append(params.PortMappings, oci.PortMapping{
99-
ListenAddress: oci.DefaultBindIPV4,
100-
ContainerPort: int32(params.APIServerPort),
101-
},
106+
params.PortMappings = append(params.PortMappings,
107+
oci.PortMapping{
108+
ListenAddress: listAddr,
109+
ContainerPort: int32(params.APIServerPort),
110+
},
102111
oci.PortMapping{
103-
ListenAddress: oci.DefaultBindIPV4,
112+
ListenAddress: listAddr,
104113
ContainerPort: constants.SSHPort,
105114
},
106115
oci.PortMapping{
107-
ListenAddress: oci.DefaultBindIPV4,
116+
ListenAddress: listAddr,
108117
ContainerPort: constants.DockerDaemonPort,
109118
},
110119
oci.PortMapping{
111-
ListenAddress: oci.DefaultBindIPV4,
120+
ListenAddress: listAddr,
112121
ContainerPort: constants.RegistryAddonPort,
113122
},
114123
)
@@ -224,12 +233,12 @@ func (d *Driver) GetIP() (string, error) {
224233

225234
// GetExternalIP returns an IP which is accessible from outside
226235
func (d *Driver) GetExternalIP() (string, error) {
227-
return oci.DefaultBindIPV4, nil
236+
return oci.DaemonHost(d.DriverName()), nil
228237
}
229238

230239
// GetSSHHostname returns hostname for use with ssh
231240
func (d *Driver) GetSSHHostname() (string, error) {
232-
return oci.DefaultBindIPV4, nil
241+
return oci.DaemonHost(d.DriverName()), nil
233242
}
234243

235244
// GetSSHPort returns port for use with ssh

Diff for: pkg/drivers/kic/oci/cli_runner.go

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"time"
2828

2929
"k8s.io/klog/v2"
30+
3031
"k8s.io/minikube/pkg/minikube/out"
3132
"k8s.io/minikube/pkg/minikube/style"
3233
)

Diff for: pkg/drivers/kic/oci/env.go

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
Copyright 2020 The Kubernetes Authors All rights reserved.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package oci
18+
19+
import (
20+
"os"
21+
22+
"k8s.io/minikube/pkg/minikube/constants"
23+
)
24+
25+
var initialEnvs = make(map[string]string)
26+
27+
func init() {
28+
for _, env := range constants.DockerDaemonEnvs {
29+
if v, set := os.LookupEnv(env); set {
30+
initialEnvs[env] = v
31+
}
32+
exEnv := constants.MinikubeExistingPrefix + env
33+
if v, set := os.LookupEnv(exEnv); set {
34+
initialEnvs[exEnv] = v
35+
}
36+
}
37+
}
38+
39+
// InitialEnv returns the value of the environment variable env before any environment changes made by minikube
40+
func InitialEnv(env string) string {
41+
return initialEnvs[env]
42+
}
43+
44+
// LookupInitialEnv returns the value of the environment variable env before any environment changes made by minikube
45+
func LookupInitialEnv(env string) (string, bool) {
46+
v, set := initialEnvs[env]
47+
return v, set
48+
}

0 commit comments

Comments
 (0)