我不知道Docker的文件系统权限有什么问题。
长话短说,我使用Jenkins进行一些测试自动化步骤,这些步骤在Windows上使用Docker容器,例如:
Jenkins主机(Linux)-> Docker容器(在Windows代理上)
有关更多详细信息,我在Docker中使用Windows样式的容器。
以下是版本:
- Windows 10 v1909
- Docker桌面:2.1.0.5稳定(引擎:19.03.5)
- 詹金斯2.190.3稳定
这是用于创建映像的Dockerfile的对应行:
FROM mcr.microsoft.com/windows/servercore/insider:10.0.18362.113-amd64
图像已创建,没有任何错误。
我在Jenkins Pipeline脚本中将Win Agent的目录作为卷装入到容器(将“工作”目录映射到了容器)。
卷映射为(host_dir:incontainer_dir):
-v c:\Users\user\work:c:\work
我简化了脚本以确定问题所在,因此管道脚本中有一个复制命令:
stages {
stage('Win') {
steps {
bat "cd c:\work && cp -r Data Copy"
}
}
}
容器成功启动,并且按预期方式复制了名为Copy的Data文件夹。 (此步骤由启动的Docker容器完成。)
但是我从容器中收到文件许可权错误。
经过一番研究,我发现复制目录(由容器直接在容器外部创建,但位于代理的文件系统上)没有所有者。
在本地Windows代理上执行dir命令的结果:
C:\Users\user\work>dir /N /Q
Volume in drive C has no label.
Volume Serial Number is 2EF3-077C
Directory of C:\Users\user\work
Date Time Type Size Owner Name
2020. 01. 07. 15:55 <DIR> DESKTOP-6PSFAAK\user .
2020. 01. 07. 15:55 <DIR> NT AUTHORITY\SYSTEM ..
2020. 01. 07. 15:55 <DIR> ... Copy
2020. 01. 06. 13:54 <DIR> DESKTOP-6PSFAAK\user Data
2 File(s) 1 200 bytes
5 Dir(s) 347 321 208 832 bytes free
正如您所看到的,复制目录的所有者被称为“ ...”三个点。当我尝试删除此目录时,系统会要求管理员特权。
我认为这可能是文件系统权限错误的原因。
有什么问题吗?