无法更改Docker中“/”目录的权限

5
我正在构建一个基于Oracle Linux 6.7的Docker镜像。 似乎创建的/目录的默认权限不正确:750。我想将其更改为755,但是Dockerfile中的chmod命令似乎没有效果。
如何设置/目录的权限?我尝试在Dockerfile中添加USER root,但也没有起作用。 Dockerfile
FROM    oraclelinux:6.7

RUN     ls -ld /
RUN     chmod 755 /
RUN     ls -ld /

输出来自docker build -t oraclelinux:fubar .
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM oraclelinux:6.7
 ---> cfc75fa9f295
Step 1 : RUN ls -ld /
 ---> Running in ed83a5c1f462
drwxr-x--- 21 root root 4096 Aug 27 14:41 /
 ---> 2a1f11648594
Removing intermediate container ed83a5c1f462
Step 2 : RUN chmod 755 /
 ---> Running in 6f045908c424
 ---> 1e44793993cb
Removing intermediate container 6f045908c424
Step 3 : RUN ls -ld /
 ---> Running in 0b1b10022e79
drwxr-x--- 21 root root 4096 Aug 27 14:41 /
 ---> f97f3e6711c5
Removing intermediate container 0b1b10022e79
Successfully built f97f3e6711c5

如果我运行容器并手动更改权限,它会起作用:

docker run -ti oraclelinux:fubar

[root@1e73ebab4b8c /]# ls -ld /
drwxr-x--- 21 root root 4096 Aug 27 14:56 /
[root@1e73ebab4b8c /]# chmod 755 /
[root@1e73ebab4b8c /]# ls -ld /
drwxr-xr-x 21 root root 4096 Aug 27 14:56 /
2个回答

1

在网上搜索后,我发现主要问题是'/'目录权限不正确,不能通过简单地在Dockerfile中更改权限来解决。

这篇文章指出可能与umask有关,bug修复已在1.8.0版本中发布。因此,第一步是升级Docker引擎。但这并未解决问题。

另一篇文章指出,当一个镜像在一个文件系统上构建,然后在另一个文件系统上使用时,'/'目录的权限会被设置错误。在我正在构建镜像的系统中,使用了'devicemapper'。这可能是Dockerhub上的镜像在不同的文件系统上构建而成。

因此,我切换到了由Oracle提供的不同的Oracle Linux镜像:

FROM oracle/oraclelinux:6.6

它解决了这个问题。


0

这对我来说很好用,我可以更改权限并且在运行它时我的容器拥有755的权限。

我建议你检查一下Docker主目录中的权限,即/var/lib/docker

你可以检查镜像和容器存储的位置。

ls -ld /var/lib/docker/aufs/diff
ls -ld /var/lib/docker/aufs/mnt

/var/lib/docker 的权限为 755。没有 /var/lib/docker/aufs 目录,但有 /var/lib/docker/vfs 目录。/var/lib/docker/devicemapper 的权限为 700。该目录下有三个子目录:devicemappermetadata 的权限也是 700,而 mnt 的权限为 750。 - swifthorseman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接