首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Docker副本不更改文件权限?(-chmod)

为什么Docker副本不更改文件权限?(-chmod)
EN

Stack Overflow用户
提问于 2021-06-09 19:26:49
回答 2查看 23.7K关注 0票数 21

考虑到这个Dockerfile

代码语言:javascript
运行
复制
FROM docker.io/alpine

RUN mkdir test

# RUN umask 0022
COPY README /test/README
COPY --chmod=777 README /test/README-777
COPY --chmod=755 README /test/README-755

COPY FORALL /test/FORALL
COPY --chmod=777 FORALL /test/FORALL-777
COPY --chmod=755 FORALL /test/FORALL-755

RUN ls -la /test

我希望在构建过程中由Docker相应地设置readwriteexecute权限。

但是最后一个命令返回

代码语言:javascript
运行
复制
total 8
drwxr-xr-x    1 root     root          4096 Jun  9 19:20 .
drwxr-xr-x    1 root     root          4096 Jun  9 19:20 ..
-rwxrwxrwx    1 root     root             0 Jun  9 19:19 FORALL
-rwxrwxrwx    1 root     root             0 Jun  9 19:19 FORALL-755
-rwxrwxrwx    1 root     root             0 Jun  9 19:19 FORALL-777
-rw-rw-r--    1 root     root             0 Jun  9 19:19 README
-rw-rw-r--    1 root     root             0 Jun  9 19:19 README-755
-rw-rw-r--    1 root     root             0 Jun  9 19:19 README-777

没有更改文件权限,也没有引发错误。

为什么不动呢?

怎么解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-09 19:31:24

我想出来了:

--chmod 标志是一个 的新特性,因此有必要通过以下方式运行启用它的构建:

代码语言:javascript
运行
复制
DOCKER_BUILDKIT=1 docker build ./

但是,实在不清楚为什么Docker没有错误地吞下--chmod选项或警告不存在的选项。

票数 26
EN

Stack Overflow用户

发布于 2021-06-10 13:04:26

这个问题在20.10.6 (拉请求跟踪问题)中得到了修正:

代码语言:javascript
运行
复制
$ cat df.chmod 
FROM busybox as base

RUN touch /test

FROM busybox as release
COPY --from=base --chmod=777 /test /test-777
COPY --from=base --chmod=555 /test /test-555
CMD ls -l /test*

$ DOCKER_BUILDKIT=0 docker build -t test-chmod-classic -f df.chmod .
Sending build context to Docker daemon  22.02kB
Step 1/6 : FROM busybox as base
 ---> a9d583973f65
Step 2/6 : RUN touch /test
 ---> Running in ed48f45a5dca
Removing intermediate container ed48f45a5dca
 ---> 5606d2d23861
Step 3/6 : FROM busybox as release
 ---> a9d583973f65
Step 4/6 : COPY --from=base --chmod=777 /test /test-777
the --chmod option requires BuildKit. Refer to https://docs.docker.com/go/buildkit/ to learn how to build images with BuildKit enabled

如果使用buildkit运行构建,则会出现预期的结果:

代码语言:javascript
运行
复制
$ DOCKER_BUILDKIT=1 docker build -t test-chmod-buildkit -f df.chmod .
[+] Building 1.0s (8/8) FINISHED
 => [internal] load build definition from df.chmod                                                                                    0.0s
 => => transferring dockerfile: 214B                                                                                                  0.0s
 => [internal] load .dockerignore                                                                                                     0.0s
 => => transferring context: 49B                                                                                                      0.0s
 => [internal] load metadata for docker.io/library/busybox:latest                                                                     0.0s
 => CACHED [base 1/2] FROM docker.io/library/busybox                                                                                  0.0s
 => [base 2/2] RUN touch /test                                                                                                        0.6s
 => [release 2/3] COPY --from=base --chmod=777 /test /test-777                                                                        0.1s
 => [release 3/3] COPY --from=base --chmod=555 /test /test-555                                                                        0.1s
 => exporting to image                                                                                                                0.0s
 => => exporting layers                                                                                                               0.0s
 => => writing image sha256:a4df92175046e36a72a769f9c7b297bc04a825708c5f6ca5873428b55c340036                                          0.0s
 => => naming to docker.io/library/test-chmod-buildkit                                                                                0.0s

$ docker run --rm test-chmod-buildkit
-r-xr-xr-x    1 root     root             0 Jun 10 13:00 /test-555
-rwxrwxrwx    1 root     root             0 Jun 10 13:00 /test-777
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67910547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档