无法连接到正在运行的Docker容器(minikube docker守护程序)

时间:2020-01-30 15:50:05

标签: docker minikube

当我使用适用于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对其进行测试?

2 个答案:

答案 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-VVirtualBoxref)。

我不会说 Docker Destkop 在您的主机上运行所有内容。它还使用Type-1虚拟机管理程序来运行容器运行时环境。请检查计算机上的Get-VM命令,应该清楚您拥有哪些VM以及由哪个工具创建的VM。