当我使用适用于Windows的Docker Desktop运行我的Docker容器时,我可以使用
连接到它docker run -p 5051:5000 my_app
http://0.0.0.0:5051
但是,当我打开另一个终端并执行此操作
minikube docker-env | Invoke-Expression
并使用与上述相同的运行命令来构建并运行相同的容器
我无法连接到正在运行的实例。
我应该使用Docker Desktop运行和测试容器,然后使用minikube仅存储图像(对于Kubernetes)吗?还是可以运行它们并通过minikube对其进行测试?
答案 0 :(得分:1)
这是因为在您的第二次尝试中,容器不在主机上运行,而是在minikube VM上运行。您将可以使用minikube VM IP访问它。
要获取minikube ip,您可以运行minikube ip
为什么?
调用minikube docker-env
会将主机上的所有docker env变量设置为与minikube环境匹配。这意味着当您随后运行容器时,它将与minikube VM上的docker守护程序一起运行。
答案 1 :(得分:1)
我问你是否有特定原因在同一台机器上同时使用 Docker Desktop 和 Minikube ,因为这是两个竞争性解决方案,它们基本上使您能够执行类似的操作任务并达到相同的目标。
This文章很好地解释了这两种工具之间的区别。
Docker-for-windows使用Type-1虚拟机管理程序,例如Hyper-V,它们是 与Type-2虚拟机管理程序(例如VirtualBox)相比更好 Minikube支持两个虚拟机管理程序。不幸的是,有几个 所使用技术的局限性,因为您不能 在您的同时运行Type-1或Type-2虚拟机管理程序 机器
如果您同时使用 Docker Desktop 和 Minikube ,我假设您正在使用Type-1虚拟机管理程序,例如提到的Hyper-V,但请记住即使它们使用相同的管理程序,这两个工具也会创建自己的虚拟机实例。基本上,您不应该将这两个工具一起使用,而是期望它们可以作为一种混合方式使用,从而可以管理单个容器环境。
首先检查您正在使用的虚拟机监控程序。如果您使用的是Hyper-V,则Get-VM
中的简单Powershell
命令(有关this文章中的更多详细信息)应该告诉您当前拥有的内容。
@mario,不,直到最近我才知道minikube有一个docker守护进程 这就是为什么我都拥有
是的, Minikube 已在docker环境中构建(实际上它可以设置所有内容,但是是的,它还可以设置容器运行时),因此基本上您不需要另外安装docker,并且@Marc ABOUCHACRA已经在他的答案中建议了 Minikube 在单独的VM上运行整个环境(具有 docker runtime 的单节点 k8s 集群)。 Linux版本具有选项--vm-driver=none
,该选项允许您使用主机容器运行时并在其上设置k8s组件,但Windows版本则不是这种情况-在这里您只能使用当前受支持的两个虚拟机管理程序之一:Hyper-V
或VirtualBox
(ref)。
我不会说 Docker Destkop 在您的主机上运行所有内容。它还使用Type-1虚拟机管理程序来运行容器运行时环境。请检查计算机上的Get-VM
命令,应该清楚您拥有哪些VM以及由哪个工具创建的VM。