在正在运行的容器内安装 Lustre 不起作用已添加所有功能

问题描述

我们正在尝试在正在运行的容器中挂载 luster 文件系统,并且已经通过以特权模式运行的容器成功地做到了这一点。

然而,对于那些在非特权模式下运行的容器,即使 linux 提供的所有功能 -- tens of capabilities -- 都包括在内,安装 luster 失败了!

然后

  1. “priviledged: True”和“cap_add: all capabilites”有什么区别?
  2. 为什么将所有功能都添加到容器中后,安装 luster 仍然失败?

安装错误

enter image description here

非特权模式容器:

version: "3"
services:
aiart:
cap_add:
  - AUDIT_CONTROL
  - AUDIT_READ
  - AUDIT_WRITE
  - BLOCK_SUSPEND
  - CHOWN
  - DAC_OVERRIDE
  - DAC_READ_SEARCH
  - FOWNER
  - FSETID
  - IPC_LOCK
  - IPC_OWNER
  - KILL
  - LEASE
  - LINUX_IMMUTABLE
  - MAC_ADMIN
  - MAC_OVERRIDE
  - MKNOD
  - NET_ADMIN
  - NET_BIND_SERVICE
  - NET_BROADCAST
  - NET_RAW
  - SETGID
  - SETFCAP
  - SETPCAP
  - SETUID
  - SYS_ADMIN
  - SYS_BOOT
  - SYS_CHROOT
  - SYS_MODULE
  - SYS_NICE
  - SYS_PACCT
  - SYS_PTRACE
  - SYS_RAWIO
  - SYS_RESOURCE
  - SYS_TIME
  - SYS_TTY_CONFIG
  - SYSLOG
  - WAKE_ALARM

image: test_lustre:1.1
#privileged: true
ports:
  - "12345:12345"
volumes:
  - /home/wallace/test-lustre/docker/lustre-client:/lustre/lustre-client

解决方法

你试过 apparmor:unconfined 吗?

version: "3"
services:
  aiart:
    cap_add:
    - SYS_ADMIN
    image: test_lustre:1.1
    security_opt:
    - apparmor:unconfined
    ports:
    - "12345:12345"
    volumes:
      - /home/wallace/test-lustre/docker/lustre-client:/lustre/lustre-client

如果这可行,那么尝试编写适合您需求的自定义 apparmor 配置文件,因为我猜 unconfined 的安全性较低:https://docs.docker.com/engine/security/apparmor/

,

--privilegedall-capabilities 的不同之处在于,--privileged 参数消除了 cgroup 控制器强制执行的所有限制,并在为所有设备提供访问权限的同时禁用了安全附魔。特权容器真正成为主机操作系统的一部分,甚至可以访问可能不应用的 AppArmor 和 SELinux 配置,例如 SELinux 标签。

当使用 --privileged 标志时,它不会对底层容器强制实施任何额外的安全性,并且内核文件系统不会以只读方式挂载到容器中。 SECCOMP 过滤也被禁用。尽管如此,您无法获得比当前命名空间允许的更多功能,例如,如果您正在运行无根守护进程。

Capabilities 是调整 root 权限的一种方式,但在执行容器时仍然会应用一些安全附魔。

here.

中提供了 Red Hat 的一篇精彩博文

正如其他答案中所指出的,在这种情况下,AppArmor 可能是问题所在,通过在运行容器时使用 --security-opt apparmor:unconfined 标志,可能会进行挂载。但是,这应该只是暂时使用。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...