在 docker 中,“chattr:在文件上设置标志时不允许操作”

Ben*_*man 6 xattr docker

我通过 ssh 连接到本地 Centos 7 docker 容器 * 并且我正在尝试运行

sudo chattr +i file1
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

chattr: Operation not permitted while setting flags on file1
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?它在谈论什么旗帜?有解决方法吗?

更改+i+a也会使命令因该错误而失败,但是当我将其更改为+d命令时成功。当我没有通过 ssh 连接到 docker 容器时,该命令也对我成功。

*我在 Windows 10 之上的 Ubuntu VirtualBox VM 主机中运行 Centos 7 docker 容器(我想避免尽可能多地处理 Windows)。所有这一切的最终目标是使用这些容器测试一些 Ansible 脚本。

rus*_*ush 10

这与功能有关:默认情况下在 docker 中禁用了chattrrequires CAP_LINUX_IMMUTABLE。只需添加--cap-add LINUX_IMMUTABLE到 docker 容器启动选项即可启用它。

下面是一个例子:

user@test:~$ docker run --cap-add LINUX_IMMUTABLE -it bash
bash-5.0# cd home
bash-5.0# touch test
bash-5.0# apk add e2fsprogs-extra
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/6) Installing libuuid (2.33-r0)
(2/6) Installing libblkid (2.33-r0)
(3/6) Installing libcom_err (1.44.5-r0)
(4/6) Installing e2fsprogs-libs (1.44.5-r0)
(5/6) Installing e2fsprogs (1.44.5-r0)
(6/6) Installing e2fsprogs-extra (1.44.5-r0)
Executing busybox-1.29.3-r10.trigger
OK: 15 MiB in 24 packages
bash-5.0# chattr +i test
bash-5.0# echo $?
0
Run Code Online (Sandbox Code Playgroud)

在这里,您可以阅读有关 docker 中 linux 功能的更多信息。