我在Windows 10上使用Docker Desktop。出于开发的目的,我想向容器公开一个本地文件夹。当在Docker中运行容器时,我通过指定volume标志(-v)来实现这一点。
在Kubernetes中运行容器时,我如何实现同样的效果?
您应该在pod的规范中使用hostpath Volume类型来从主机节点的文件系统装载文件或目录,其中hostpath.path字段应该采用以下格式以接受类似Windows的路径:
- /W/foapp/influxdb
- //W/fooapp/influxdb
- /////W/fooapp/influxdb
请检查github问题,解释Windows上Kubernetes卷的特性。我还假设您已经在Docker for Windows安装中启用了共享驱动器功能。
使用k8s 1.21.5,以下类型的路径对我有效:
/run/desktop/mnt/host/c/PATH/TO/FILE
通过挖掘这个github问题帮助我解决了使用哪条路径:https://github.com/kubernetes/kubernetes/issues/59876
解释在上面的github链接上。
在WSL2中安装的发行版上不存在
/run/desktop/mnt/host/c
的文件夹装载-在该WSL2发行版上,指向C:\驱动器的装载点是更明显的/mnt/c
。请注意,Kubernetes和Docker没有安装在您安装的WSL2发行版中。相反,Docker Desktop for Windows创建了自己的名为
docker-desktop
的WSL2虚拟机,并在该虚拟机上安装Docker和Kubernetes。然后,Docker Desktop for Windows将docker
和kubectl
CLI安装在WSL2发行版(以及Windows机器)上,并将它们全部配置为指向它在docker-desktop
VM上创建的Docker和Kubernetes实例。这个docker桌面虚拟机托管docker和Kubernetes,还包含指向Windows C:\驱动器的/run/desktop/mnt/host/c
装载点,容器可以使用它来保存数据。您可以远程访问
docker-desktop
虚拟机,并按照上的说明(和讨论)查看/run/desktop/mnt/host/c
装载点和文件夹结构https://stackoverflow.com/a/62117039/11057678:docker run -it --rm --privileged --pid=host justincormack/nsenter1