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

swi*_*man 5 docker

我正在构建基于 Oracle Linux 6.7 的 Docker 映像。看来/创建的目录的默认权限不正确:750。我想将其更改为755,但chmodDockerfile中的命令似乎没有效果。

如何设置/目录的权限?我尝试添加 USER root Dockerfile 但也不起作用。

Dockerfile

FROM    oraclelinux:6.7

RUN     ls -ld /
RUN     chmod 755 /
RUN     ls -ld /
Run Code Online (Sandbox Code Playgroud)

输出来自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
Run Code Online (Sandbox Code Playgroud)

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

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 /
Run Code Online (Sandbox Code Playgroud)

swi*_*man 1

在网上搜索后发现,主要问题是“/”目录的权限不正确,并且无法通过简单地更改 Dockerfile 内的权限来修复。

这篇文章表明它可能与umask1.8.0 版本中的错误修复有关。因此,第一步就是升级 Docker 引擎。它没有解决问题。

另一篇文章表明,当在一个文件系统上构建图像然后在另一个文件系统上使用时,“/”目录的权限设置不正确。在我构建图像的系统上,使用了“devicemapper”。Dockerhub 中的映像可能是构建在不同的文件系统上的。

因此,我切换到 Oracle 提供的另一个 Oracle Linux 映像:

FROM oracle/oraclelinux:6.6

它解决了问题。