ubuntu 在docker容器内创建网络命名空间时出错,错误:mount --make-shared /run/netns失败:拒绝许可

flvlnr44  于 2023-08-03  发布在  Docker
关注(0)|答案(2)|浏览(254)

我在docker容器内创建网络命名空间时收到一个错误,说权限被拒绝。

command  
ip netns add red

个字符
我正在运行一个图像ubuntu:20. 10,并试图通过添加特定的功能到容器,它没有帮助。

docker run -it --rm --name=ubuntu --cap-add CAP_SYS_ADMIN --cap-add NET_ADMIN ubuntu:20.10
apt-get update && apt-get install -y net-tools && apt-get install -y iproute2


即使在添加所有功能后,问题仍然相同。

docker run -it --rm --name=ubuntu --cap-add ALL ubuntu:20.10

jogvjijk

jogvjijk1#

另一个答案建议添加--privileged,但请注意,添加--privileged实际上删除了所有安全功能。如果您对此感到不舒服,您可能更喜欢一种只允许容器访问其需要的内容的方法。
根本原因是Docker的default apparmor profile包含规则deny mount,该规则阻止mount在Docker容器内工作,这就是导致错误消息mount --make-shared /run/netns failed: Permission denied的原因。
您可以通过观察将--security-opt apparmor=unconfined添加到命令中会发生什么来确认这是根本原因,这将禁用apparmor,但保留其他安全功能。请注意,mount命令成功执行:

docker run -it --rm --name=ubuntu \
  --cap-add CAP_SYS_ADMIN --cap-add NET_ADMIN \
  --security-opt apparmor=unconfined \
  ubuntu
apt-get update && apt-get install -y net-tools iproute2
ip netns add red # succeeds

字符串
如果你不想完全退出apparmor,你可以创建一个自定义apparmor配置文件,然后用apparmor_parser -r -W path/to/your/profile加载它,然后用--security-opt apparmor=your-profile-name将它应用到docker命令中。您可以通过复制Docker的模板创建自定义apparmor配置文件,然后调整它以满足您的需求。
在撰写本文时,Docker does not have an easy way to show the apparmor profile it is currently using,但您可以look at the source template,然后手动展开模板(通过遵循模板逻辑)。
参见https://docs.docker.com/engine/security/apparmor/

m3eecexj

m3eecexj2#

--cap-add--privileged不一样。
参考:https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities
通过以特权运行容器对问题进行排序。添加网络命名空间似乎不需要功能。

docker run -d --name=<name> --network=none --privileged <image>:<tag>

字符串


的数据

相关问题