Dockerfile 中的 setfacl 无效

setfacl in Dockerfile has no effect

我想在使用 setfacl 构建 docker 图像时为某些文件夹设置默认 acl,但它没有效果。默认 acl 不变。我的目标是在 /opt 中创建的每个文件都必须具有任何用户的 rwX 权限,因为稍后图像将 运行 具有任意 uid 并且需要对 /opt.

的完全访问权限

这是一个简单的例子Docker文件

FROM ubuntu:bionic
SHELL ["/bin/bash", "-c"]
RUN apt-get update > /dev/null && apt-get install -y --no-install-recommends acl > /dev/null
RUN chmod -R a+rwXs /opt
RUN setfacl -d -m o::rwx /opt
RUN getfacl /opt

输出为

# file: opt
# owner: root
# group: root
# flags: ss-
user::rwx
group::rwx
other::rwx

这是错误的,缺少默认 acl。但是如果我 运行 容器中的手动命令它会工作

docker run -ti --rm ubuntu:bionic bash
root@636bf8fdba41:/# apt-get update > /dev/null && apt-get install -y --no-install-recommends acl > /dev/null
debconf: delaying package configuration, since apt-utils is not installed
root@636bf8fdba41:/# chmod -R a+rwXs /opt
root@636bf8fdba41:/# setfacl -d -m o::rwx /opt
root@636bf8fdba41:/# getfacl /opt
getfacl: Removing leading '/' from absolute path names
# file: opt
# owner: root
# group: root
# flags: ss-
user::rwx
group::rwx
other::rwx
default:user::rwx
default:group::rwx
default:other::rwx

知道为什么 docker 在 Docker 文件中 运行ning setfacl 时没有正确应用 acl 更改吗?

Docker 版本 19.03.5,内部版本 633a0ea838 Ubuntu 18.04 作为主持人

Any idea why docker does not correctly apply the acl changes when running setfacl in the Dockerfile?

不要把这个当成权威答案,因为我只是猜测。

Docker 图像必须 运行 在具有不同存储后端的各种发行版上(当您考虑图像注册表时可能更多,例如 hub.docker.com)。即使是那些基于文件系统的文件系统也可能得到具有不同功能的不同文件系统的支持。

这意味着为了 Docker 图像在所有情况下都能够 运行 可靠且可重现,它们必须尽量减少它们保留的扩展文件系统功能的数量。

这可能是实现文件系统 ACL 所需的扩展属性未作为映像的一部分保留的原因。


它在 容器 中工作,因为此时文件存储在特定的本地文件系统中,因此您可以利用该文件系统支持的任何功能。