skaffold 是本地 cli 工具,不运行在集群中,仅负责监听代码、构建镜像、推送并触发部署;minikube 未启动会导致 skaffold dev 卡住,需先执行 minikube status 验证状态,并用 --driver=docker 启动,再运行 eval $(minikube docker-env) 使 skaffold 复用其 docker daemon。

Skaffold 不是“同步控制器”,它不运行在集群里,也不管理 Pod 生命周期——它只是你本地终端里的一个 CLI 工具,负责监听代码、构建镜像、推到 Minikube 或远程 registry,再触发 kubectl apply。
minikube 启动失败时 skaffold dev 会直接卡住
根本原因不是 Skaffold 配置问题,而是 Minikube 根本没起来。常见现象:skaffold dev 执行后卡在 Starting build... 或报 Failed to connect to cluster。
- 先手动验证 Minikube 状态:
minikube status,如果显示Stopped或Invalid,说明没跑起来 - Mac macOS Sequoia(15+)必须用
--driver=docker,minikube start --driver=docker是目前最稳的启动方式 - Windows 用户别折腾 Hyper-V,直接开 Docker Desktop,然后跑
minikube start --driver=docker - 启动后执行
eval $(minikube docker-env),让本地 Docker CLI 指向 Minikube 内置的 daemon——这步跳过,skaffold 就找不到镜像上下文
skaffold.yaml 中 image 名字不能带 registry 前缀
本地调试时,Skaffold 默认把镜像 build 出来后直接交给 Minikube 的 Docker daemon 使用,不 push 到任何远程 registry。如果写成 image: docker.io/myapp,Skaffold 会试图 push 到 Docker Hub,而 Minikube 里压根拉不到。
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 正确写法:
image: myapp(纯名字,无域名、无斜杠) - 确保
build.artifacts[].context指向含Dockerfile的目录,且该Dockerfile能基于 Go 二进制完成多阶段构建(如用alpine:latest作运行时基础镜像) - 不要手动指定
tagPolicy;dev 模式下默认用sha256,改了反而容易导致缓存失效或部署不更新
Go 微服务连不上自己的 Service:localhost 是错的
你在本地 IDE 里跑的 Go 进程,和 Minikube 里的 Pod 是两个网络空间。硬写 http://localhost:30080 必然 connection refused。
- 查 Service 地址:
minikube ip返回的是 Minikube 虚拟机 IP(比如192.168.49.2) - 查 NodePort:
kubectl get service my-service -o jsonpath='{.spec.ports[0].nodePort}' - 拼出真实地址:
http://192.168.49.2:30080,这才是你的 Go 程序该请求的目标 - Service 类型必须是
NodePort或LoadBalancer;ClusterIP只能在 Pod 内部访问,本地进程不可达
真正麻烦的点不在配置文件,而在网络视角切换——你得时刻分清“宿主机进程”和“集群内 Pod”各自在哪张网卡上、走哪条路由。一旦混淆 localhost 和 minikube ip,所有调试都会变成猜谜。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










