Docker中`--privileged`和`--cap-add=all`的区别

6

背景:我正在运行一个Docker容器,需要加载/卸载一个内核模块,该模块使连接到远程服务器的USB设备在主机上可用,我随后要将其在容器中使用。

使用--privileged和对/lib/modules/dev进行绑定挂载时,它可以正常工作。

现在,我想去除特权模式,并只允许最少必要的访问。 我尝试了--cap-add=all,但那似乎还不够。 --privileged 还允许了什么?


这也回答了“--privileged”和“--security-opt seccomp=unconfined”的区别是什么的问题:privileged提供更多权限,而seccomp=unconfined只提供对额外系统调用的访问。 - Trevor Boyd Smith
1个回答

7

设置特权应该修改:

  • capabilities:移除任何能力限制
  • devices:主机设备将可见
  • seccomp:移除对允许系统调用的限制
  • apparmor/selinux:不应用策略
  • cgroups:我认为容器不受cgroup的限制

这是我记得的,如果这不能解决你的问题,我可以在代码中找到更多信息。

p.s. 这里有一个关于--privileged功能的文档链接:https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities


太棒了,谢谢!你知道在哪里可以找到这个文档吗?我看了源代码,但是我只能在这里找到限制功能的解除:https://github.com/moby/moby/blob/46cdcd206c56172b95ba5c77b827a722dab426c5/daemon/exec_linux.go - nfelger
@nfelger 不确定。如果没有记录在某个地方,那么它真的应该被记录下来。这只是我凭记忆所说的。 - BMitch
1
@nfelger 当您创建容器时,会配置各种设置:https://github.com/moby/moby/blob/470ae8422fc6f1845288eb7572253b08f1e6edf8/daemon/oci_linux.go - BMitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接