Minikube挂载本地目录存储Jenkins数据失败求助
问题:Minikube mount 连接超时,无法挂载本地目录到集群
我需要在Minikube集群上运行Jenkins并持久化工作区数据,执行minikube mount "/home/sourabh/jenkins_data:/jenkins_data"时失败,报错连接超时。
环境信息
- 操作系统:Ubuntu 22.04.1 LTS (Jammy Jellyfish)
- Minikube版本:1.28
- Kubernetes版本:1.23
错误详情及日志
$ minikube mount "\/home\/sourabh\/jenkins_data:\/jenkins_data" 📁 Mounting host path /home/sourabh/jenkins_data into VM as /jenkins_data ... ▪ Mount type: ▪ User ID: docker ▪ Group ID: docker ▪ Version: 9p2000.L ▪ Message Size: 262144 ▪ Options: map[] ▪ Bind Address: 172.19.196.135:38837 🚀 Userspace file server: ufs starting ❌ Exiting due to GUEST_MOUNT_COULD_NOT_CONNECT: /bin/bash -c "sudo mount -t 9p -o dfltgid=$(grep ^docker: /etc/group | cut -d: -f3),dfltuid=$(id -u docker),msize=262144,port=38837,trans=tcp,version=9p2000.L 172.19.196.135 /jenkins_data": Process exited with status 32 stdout: stderr: mount: /jenkins_data: mount(2) system call failed: Connection timed out. 💡 Suggestion: If the host has a firewall: 1. Allow a port through the firewall 2. Specify "--port=<port_number>" for "minikube mount"
详细日志
Binary: Built with gc go1.19.2 for linux/amd64 Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg I0109 16:36:07.842613 2616 out.go:296] Setting OutFile to fd 1 ... I0109 16:36:07.842751 2616 out.go:348] isatty.IsTerminal(1) = true I0109 16:36:07.842754 2616 out.go:309] Setting ErrFile to fd 2... I0109 16:36:07.842757 2616 out.go:348] isatty.IsTerminal(2) = true I0109 16:36:07.842890 2616 root.go:334] Updating PATH: /home/sourabh/.minikube/bin W0109 16:36:07.842980 2616 root.go:311] Error reading config file at /home/sourabh/.minikube/config/config.json: open /home/sourabh/.minikube/config/config.json: no such file or directory I0109 16:36:07.843091 2616 mustload.go:65] Loading cluster: minikube I0109 16:36:07.843369 2616 config.go:180] Loaded profile config "minikube": Driver=docker, ContainerRuntime=docker, KubernetesVersion=v1.25.3 I0109 16:36:07.843676 2616 cli_runner.go:164] Run: docker container inspect minikube --format={{.State.Status}} I0109 16:36:07.914497 2616 host.go:66] Checking if "minikube" exists ... I0109 16:36:07.914672 2616 cli_runner.go:164] Run: docker container inspect -f "'{{(index (index .NetworkSettings.Ports \"8443/tcp\") 0).HostPort}}'" minikube I0109 16:36:07.978854 2616 mount.go:141] Selecting IP for WSL. This may be incorrect... I0109 16:36:07.983207 2616 out.go:177] 📁 Mounting host path /home/sourabh/jenkins_data into VM as /jenkins_data ... I0109 16:36:07.987688 2616 out.go:177] ▪ Mount type: I0109 16:36:07.992029 2616 out.go:177] ▪ User ID: docker I0109 16:36:07.996174 2616 out.go:177] ▪ Group ID: docker I0109 16:36:08.000666 2616 out.go:177] ▪ Version: 9p2000.L I0109 16:36:08.005048 2616 out.go:177] ▪ Message Size: 262144 I0109 16:36:08.009032 2616 out.go:177] ▪ Options: map[] I0109 16:36:08.012980 2616 out.go:177] ▪ Bind Address: 172.19.196.135:46487 I0109 16:36:08.017007 2616 out.go:177] 🚀 Userspace file server: I0109 16:36:08.016686 2616 ssh_runner.go:195] Run: /bin/bash -c "[ \"x$(findmnt -T /jenkins_data | grep /jenkins_data)\" != \"x\" ] && sudo umount -f /jenkins_data || echo \" I0109 16:36:08.017091 2616 cli_runner.go:164] Run: docker container inspect -f "'{{(index (index .NetworkSettings.Ports \"22/tcp\") 0).HostPort}}'" minikube I0109 16:36:08.087038 2616 sshutil.go:53] new ssh client: &{IP:127.0.0.1 Port:61875 SSHKeyPath:/home/sourabh/.minikube/machines/minikube/id_rsa Username:docker} I0109 16:36:08.127492 2616 mount.go:168] unmount for /jenkins_data ran successfully I0109 16:36:08.127507 2616 ssh_runner.go:195] Run: /bin/bash -c "sudo mkdir -p /jenkins_data" I0109 16:36:08.135776 2616 ssh_runner.go:195] Run: /bin/bash -c "sudo mount -t 9p -o dfltgid=$(grep ^docker: /etc/group | cut -d: -f3),dfltuid=$(id -u docker),msize=262144,port=46487,trans=tcp,version=9p2000.L 172.19.196.135 /jenkins_data" I0109 16:37:31.315966 2616 out.go:177] 🔥 Unmounting /jenkins_data ... I0109 16:37:31.322056 2616 ssh_runner.go:195] Run: /bin/bash -c "[ \"x$(findmnt -T /jenkins_data | grep /jenkins_data)\" != \"x\" ] && sudo umount -f /jenkins_data || echo \" Log file created at: 2023/01/09 16:38:06 Running on machine: Sourabh_PC Binary: Built with gc go1.19.2 for linux/amd64 Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg I0109 16:38:06.875663 2694 out.go:296] Setting OutFile to fd 1 ... I0109 16:38:06.875853 2694 out.go:348] isatty.IsTerminal(1) = true
解决方案尝试
1. 调整防火墙规则
防火墙拦截是这类超时问题的常见原因,执行以下操作:
- 临时开放日志中出现的端口(以46487为例):
sudo ufw allow 46487/tcp - 或者直接开放Minikube常用的端口范围:
sudo ufw allow 30000-32767/tcp sudo ufw allow 10250-10259/tcp - 重启防火墙生效:
sudo ufw reload
2. 指定固定端口执行mount
手动指定端口避免Minikube随机选择被拦截的端口:
minikube mount "/home/sourabh/jenkins_data:/jenkins_data" --port=30001
注意先开放这个指定端口的防火墙规则。
3. 修正Minikube网络IP选择
日志提示IP选择可能有误,重新指定Minikube的API服务器IP后再尝试:
minikube stop minikube start --apiserver-ips=192.168.49.1 --apiserver-name=minikube minikube mount "/home/sourabh/jenkins_data:/jenkins_data"
4. 改用HostPath卷替代mount命令
如果mount命令持续失败,直接在Jenkins的Deployment中使用HostPath卷映射本地目录:
apiVersion: apps/v1 kind: Deployment metadata: name: jenkins spec: replicas: 1 selector: matchLabels: app: jenkins template: metadata: labels: app: jenkins spec: containers: - name: jenkins image: jenkins/jenkins:lts ports: - containerPort: 8080 volumeMounts: - name: jenkins-data mountPath: /var/jenkins_home volumes: - name: jenkins-data hostPath: path: /home/sourabh/jenkins_data type: DirectoryOrCreate
应用该配置:
kubectl apply -f jenkins-deployment.yaml
5. 检查Docker与Minikube的连通性
测试Minikube容器和主机的网络连通性:
docker exec minikube ping 172.19.196.135 -c 3
如果ping不通,重启Docker和Minikube:
sudo systemctl restart docker minikube stop minikube start
内容的提问来源于stack exchange,提问作者Sy-py
相关产品推荐
相关产品推荐

