背景:
这个 docker cp out from 容器失败的行为有点古怪,所以我认为应该记录下来。我找不到匹配的问题或 docker 问题,但我可以看到聊天/评论,我认为这表明人们正在遇到这种情况。
我有一个 docker 映像,在创建映像时我会打包映像中的一些目录。当容器第一次启动时,目录将从容器中复制出来并用于初始化目录,然后将该目录安装为容器的 docker 卷。
问题:
我所看到的是,根据图像的构建方式,有时在执行目录的部分副本后,目录外的 docker cp 会失败,并显示“打开 <dir>/<file> 权限被拒绝” 。
我发现当开发人员在本地构建图像时,它工作正常。我发现当从已发布的模块构建图像时它失败了。
以 root 身份在目录外执行 docker cp 工作正常。
以普通用户身份在目录外执行 docker cp 不起作用。该目录已创建,但为空。
目录权限(奇怪的是源目录)被证明是问题的原因
这有点明显,但也不明显;顶级目录可以正常创建,因此无论源目录的权限是什么,您都希望完整目录层次结构的递归副本能够工作。
在源代码管理目录所有权内设置了写权限。当模块被释放时,写入权限被删除。因此,解决方案是在使用已发布的模块进行构建时,必须添加回写入权限。
drwxr-xr-x dev/dev buildarea/.../jenkins/
drwxr-xr-x dev/dev buildarea/.../jenkins/email-templates/
dr-xr-xr-x root/root /releasearea/.../jenkins/
dr-xr-xr-x root/root /releasearea/.../jenkins/email-templates/
Run Code Online (Sandbox Code Playgroud)
我在 2017 年 7 月容器中的 docker 17.03.1 centos cp 中看到了这一点。