Linux 如何在docker映像中设置二进制文件的CAP

Linux 如何在docker映像中设置二进制文件的CAP,linux,docker,capability,Linux,Docker,Capability,我想在docker映像中设置一些二进制文件的功能,以便可以在具有非根用户的容器中执行它们。我已尝试在docker文件中设置CAP,然后使用docker build:生成此映像,但在使用此映像创建容器时,找不到文件的任何功能集:。这是docker臭虫吗?或者有没有其他方法可以为docker image中的文件设置功能?我以cap\u net\u admin和ip为例 在下面的Dockerfile中,/bin/ip已授予cap\u net\u admin权限 FROM debian RUN use

我想在docker映像中设置一些二进制文件的功能,以便可以在具有非根用户的容器中执行它们。我已尝试在docker文件中设置CAP,然后使用docker build:生成此映像,但在使用此映像创建容器时,找不到文件的任何功能集:。这是docker臭虫吗?或者有没有其他方法可以为docker image中的文件设置功能?

我以
cap\u net\u admin
ip
为例

在下面的Dockerfile中,
/bin/ip
已授予
cap\u net\u admin
权限

FROM debian

RUN useradd -m alice -s /bin/bash \
    && setcap cap_net_admin+ep /bin/ip

USER alice
CMD ["/bin/ip", "link", "show"]
但建成后,它似乎不起作用

$ docker build -t cap .
$ docker run --rm cap
standard_init_linux.go:219: exec user process caused: operation not permitted
这是因为Docker运行时限制了权限。 如果您真的想这样做,则需要使用
--cap add

$ docker run --rm --cap-add=cap_net_admin cap
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
43: eth0@if44: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
工具书类

图像不能强制操作员授予其额外权限,必须在
docker run
时间指定这些权限。您是否可以编辑该问题,以包括您正在使用的实际
docker run
命令和您得到的实际错误(作为文本而不是图像;在问题中而不是链接后面)?
spec:
  containers:
  - name: cap-test
    image: cap
    securityContext:
      capabilities:
        add: ["NET_ADMIN"]