如何在Minikube中本地测试Docker镜像?

yftpprvb  于 2023-11-17  发布在  Docker
关注(0)|答案(2)|浏览(156)

我已经安装了kubectl命令行工具v1.27.2客户端版本,v5.0.1 kustomize版本和v1.26.3服务器版本。我在Microsoft Windows 10 Enterprise和Git Bash上使用minikube v1.30.1。我通过以下方式启动了minikube集群:

minikube start

字符串
然后,我在minikube集群中重用Docker守护进程:

eval $(minikube docker-env)


现在,我想在minikube集群中测试hashicorp/http-echo docker镜像。我尝试将镜像作为docker容器运行:

docker run -p 5678:5678 hashicorp/http-echo -text="hello world"


但是,如果我在浏览器中访问http://localhost:5678/站点,则无法访问。因此,我强制删除了docker镜像并从minikube退出了docker环境:

docker rmi -f docker.io/hashicorp/http-echo:latest
eval $(minikube docker-env -u)


如果我在没有minikube的情况下对docker镜像进行测试,一切都能正常工作。但是我如何在浏览器中测试minikube集群中的docker镜像呢?

l5tcr1uw

l5tcr1uw1#

启动minikube集群并重用Docker守护进程后,需要拉取Docker镜像:

docker pull hashicorp/http-echo

字符串
通过执行minikube image ls命令确保镜像存在。之后,使用Kubernetes命令行工具run命令而不是Docker:

kubectl run http-echo --image=hashicorp/http-echo:latest --image-pull-policy=Never


它从docker镜像创建http-echo pod,您可以通过kubectl get pod命令确保这一点。此外,它禁用了镜像拉取策略,因为docker镜像已经在本地minikube集群中。最后一步是暴露pod的端口以在浏览器中访问它:

kubectl port-forward http-echo 8080:5678


Pod的端口是5678,本地端口是8080。现在,您应该可以在http://localhost:8080站点的浏览器中访问该服务。
要删除pod,请执行kubectl delete pod http-echo命令。
注意事项:您可以通过省略镜像拉取策略参数来减少步骤数量,该参数允许您从Docker Hub下载镜像。但是如果您使用docker build -t <my-image> .命令构建自定义镜像,则--image-pull-policy=Never参数将有意义,因为您不想从外部源拉取Docker镜像。

trnvg8h3

trnvg8h32#

1.你不应该在镜像上使用[:latest]标签,即使你使用(eval $(minikube docker-env))。因为它内部从远程仓库而不是本地镜像获取。你应该指定标签名称[:1.xx,:test etc]。然后你可以从你的CLI中使用remove image-pull-policy选项。
https://kubernetes.io/docs/concepts/containers/images/#updating-images见注解。
在生产环境中部署容器时,应避免使用:latest标签,因为很难跟踪映像的哪个版本正在运行,也很难正确回滚。
相反,指定一个有意义的标记,如v1.42.0和/或摘要。
1.你也可以使用service而不是port-forward。port-forward是访问pod的简单方法。
https://kubernetes.io/docs/concepts/services-networking/service/

相关问题