Windows Docker上的Kubernetes,具有hostPath的持久卷给出不允许的操作

x6yk4ghg  于 2023-03-12  发布在  Kubernetes
关注(0)|答案(4)|浏览(163)

我正在尝试将windows中的一个文件夹连接到一个container文件夹。这是为一个需要读取文件夹中文件的.NET应用程序准备的。在一个普通的docker container中,使用docer-compose,应用程序可以正常工作,但由于这只是我们需要监控的几个不同应用程序中的一个,我们正在尝试让kubernetes参与进来。这也是我们失败的地方。作为一个kubernetes的初学者,我使用komposeiderexe将合成文件转换为kuberetes样式。但是,无论我使用hostPath还是persistentVolumeClaim作为标志,我都不能让事情“开箱即用”。使用hostPath,路径非常不正确,使用persistentVolumeClaim,我得到一个警告,说不支持在主机上安装卷。因此,我尝试自己完成这一部分,但既不使用永久卷也不直接在部署文件中输入挂载数据,我所做的最接近的事情是我可以进入文件夹,并可以更改为其中的子文件夹,但只要我尝试运行任何其他命令,无论是“ls”或“cat”,我得到了“不允许操作”。这是我的Docker合成文件,它按预期工作

version: "3.8"
services:
    test-create-hw-file:
        container_name: "testcreatehwfile"
        image: test-create-hw-file:trygg
        network_mode: "host"
        volumes:
            - /c/temp/testfiles:/app/files

在该文件上运行konvert compose:
x一个一个一个一个x一个一个二个x
在该文件上运行kubectl apply只会出现臭名昭著的错误“Error:守护程序的错误响应:无效模式:/app/files”,这意味着,据我所知,不是“/app/files”错了,而是应该连接的文件夹的格式不正确。这是相当奇怪的C:\temp\c\temp\testfiles行。在谷歌搜索和阅读了很多之后,我有两种方法来更改它,到/c/temp/testfiles/host_mnt/c/temp/testfiles。两者都以相同的“不允许操作”结束。我正在通过进入Docker桌面中容器上的CLI来检查这一点。
测试中的图像只是一个应用程序,除了等待五分钟不退出,然后才能检查文件夹之外,它现在什么也不做。我以root用户身份登录到shell,在执行“ls -lA”时,我有下面一行用于文件夹:

drwxrwxrwx 1 root root      0 Feb  7 12:04 files

此外,docker-userc:\temp\testfiles文件夹具有完全访问权限。

部分版本数据:

Docker version 20.10.12, build e91ed57

Kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.5", GitCommit:"5c99e2ac2ff9a3c549d9ca665e7bc05a3e18f07e", GitTreeState:"clean", BuildDate:"2021-12-16T08:38:33Z", GoVersion:"go1.16.12", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.5", GitCommit:"5c99e2ac2ff9a3c549d9ca665e7bc05a3e18f07e", GitTreeState:"clean", BuildDate:"2021-12-16T08:32:32Z", GoVersion:"go1.16.12", Compiler:"gc", Platform:"linux/amd64"}

Kompose version
1.26.1 (a9d05d509)

Host OS: Windows 10, 21H2

//崔格

wswtfjt7

wswtfjt71#

很高兴我最初的评论解决了你的问题。我想以官方回答的形式扩展一下我的想法。
要在Docker Desktop for Windows上使用Kubernetes装载卷,路径为:

/run/desktop/mnt/host/c/PATH/TO/FILE

不幸的是,没有官方文档,但这里有一个很好的评论与解释,这是与Docker守护程序:
/mnt/wsl实际上是跨发行版挂载tmpfs的挂载点
Docker守护程序将其装载到其/run/desktop/mnt/host/wsl目录中

wfveoks0

wfveoks02#

多亏了RadekW,现在问题解决了,路径应该写成/run/desktop/mnt/host/c/PATH/TO/FILE,在我的例子中:/run/desktop/mnt/host/c/temp/testfiles .如果我找到任何关于这方面的文档,我会添加一个源代码。

8qgya5xd

8qgya5xd3#

我面临着同样的问题,它采取了3天。最后我通过重新配置解决如下:

type: DirectoryOrCreate
path: /run/desktop/mnt/host/c/users/public/your_folder
koaltpgm

koaltpgm4#

+1 to @RadekW.只是为了清楚起见,这里是更新的persistent-volume.yaml,感谢这篇文章为我工作:

apiVersion:  v1
kind: PersistentVolume
metadata:
    name: my-volume
    labels:
        type: local
spec:
    storageClassName: hostpath
    capacity:
        storage: 200M
    accessModes:
        - ReadWriteOnce
    hostPath:
        path: "/run/desktop/mnt/c/Temp/scratch-volume"

相关问题