我在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
型
2条答案
按热度按时间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
命令成功执行:字符串
如果你不想完全退出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/
m3eecexj2#
--cap-add
和--privileged
不一样。参考:https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities
通过以特权运行容器对问题进行排序。添加网络命名空间似乎不需要功能。
字符串
的数据