我想在使用 setfacl 构建 docker 映像时为某些文件夹设置默认 acl,但它没有效果。默认 acl 不变。我的目标是在 /opt 中创建的每个文件都必须对任何用户都具有 rwX 权限,因为该映像稍后将使用任意 uid 运行,并且需要对 /opt 的完全访问权限。
这是一个简单的 Dockerfile 示例
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 在 Dockerfile 中运行 setfacl 时没有正确应用 acl 更改吗?
Docker 版本 19.03.5,内部版本 633a0ea838
Ubuntu 18.04 作为主机
知道为什么 docker 在 Dockerfile 中运行 setfacl 时没有正确应用 acl 更改吗?
不要将此视为权威答案,因为我只是猜测。
Docker 镜像必须在各种发行版上运行,具有不同的存储后端(当您考虑镜像注册表时,可能会更多,例如hub.docker.com
)。即使那些基于文件系统的文件系统也可能受到具有不同功能的不同文件系统的支持。
这意味着为了让 Docker 镜像在所有情况下都能可靠且可重复地运行,它们必须最大限度地减少它们保留的扩展文件系统功能的数量。
这可能就是为什么实现文件系统 ACL 所需的扩展属性没有保留为映像的一部分的原因。
它工作在一个容器因为此时文件存储在特定的本地文件系统上,因此您可以利用该文件系统支持的任何功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)