linux - Dockerfile 中的 setfacl 没有效果
问题描述
在使用 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
知道为什么在 Dockerfile 中运行 setfacl 时 docker 没有正确应用 acl 更改吗?
Docker 版本 19.03.5,构建 633a0ea838 Ubuntu 18.04 作为主机
解决方案
知道为什么在 Dockerfile 中运行 setfacl 时 docker 没有正确应用 acl 更改吗?
不要将此作为权威答案,因为我只是猜测。
Docker 镜像必须在具有不同存储后端的各种发行版上运行(当您考虑镜像注册表时,可能会更多,例如hub.docker.com
)。即使是基于文件系统的那些也可能由具有不同功能的不同文件系统支持。
这意味着,为了让 Docker 镜像在所有情况下都能可靠且可重复地运行,它们必须尽量减少它们保留的扩展文件系统功能的数量。
这可能就是为什么没有将实现文件系统 ACL 所需的扩展属性保留为映像的一部分的原因。
它在容器中工作,因为此时文件存储在特定的本地文件系统上,因此您可以利用该文件系统支持的任何功能。
推荐阅读
- mysql - 如何从 Sequelize 中的包含中引用父模型列?
- c# - ASP.net MVC - 我迷失在从数据库下载文件
- javascript - React.js:从选择中传递变量的问题
- sql - SQL Server - 一次使用 IF EXISTS 删除多个列
- angular - Angular - 如何打开以单击图像为中心的虚拟滚动?
- mysql - 在 MySQL 中 Hibernate 将 YearMonth 存储为 Blob 而不是文本
- java - A* Path Finder (Java) 使用 1024 多维数组效率低下
- splunk - 使用 Splunk Dashboard 如何为表的每一列创建过滤器
- python - Matplotlib 条形图频率和百分比在一起
- google-sheets - 从第 x 行开始排序