【发布时间】:2021-03-10 19:53:30
【问题描述】:
我正在尝试在非特权 docker 容器中运行 DPDK。虽然我可以限制容器的权限并将容器指定为非特权,但我仍然需要以 root 身份运行 dpdk 应用程序(比如 testpmd)。我也可以以非 root 身份运行容器并使用 sudo 启动 testpmd。
我想知道是否有人能够在 docker 容器内以非 root 用户身份运行 dpdk(没有 --no-huge 选项)。如果有,是否需要授予某些特权或权限?
更新:
我正在使用 DPDK 20.02。我想我已经将问题缩小到 ulimit -l 设置。
来自 testpmd: EAL:无法设置 DMA 重新映射,错误 12(无法分配内存)
来自 Dmesg dmesg:[5697911.199003] vfio_pin_pages_remote:超出 RLIMIT_MEMLOCK (65536)。
回应维平:
您是否需要调整容器的限制?如果是这样怎么办? 我正在使用 helm 部署 pod,所以我不确定是否可以修改 docker run 命令,看来我需要在主机上编辑 /etc/security/limits.conf 并重新部署。
另外,你用什么来赋予 fs 的所有权?没有非特权容器会阻止您吗?为了测试,我只是 sudo 它,但最终我希望能够删除 SETUID/SETGID。
【问题讨论】:
-
使用 DPDK 18.11 和 19.11.3 LTS 我可以在主机上以非 root 用户运行。 Insdie 容器我必须以非 root 身份授予大页面和 vfio 设备的所有权。能否分享一下 DPDK 版本、操作系统、错误详情
-
感谢分享 DPDK 版本的更新和观察。看起来你的问题有两个部分。 1)在非特权模式下运行 DPDK 的最低设置是什么,以及 2)在非特权模式下运行 docker 需要做的最低设置是什么?
If the question is related to DPDK然后您需要先寻址Error creating '/run/user/0/dpdk': Permission denied,然后是EAL: rte_service_init() failed,然后是EAL: FATAL: Cannot get hugepage informatio。你能分享你所面临的错误的日志吗? -
您能分享您所面临问题的最新情况吗?如果你已经能够在主机上以非特权模式运行,你只需要允许在 docker 中允许文件访问权限,以正确的文件夹在容器内运行。
-
@JerenyBrown 基于您的编辑
I just sudo it和I think I've narrowed down the problem to a ulimit -l setting。这是否意味着Docker run command is executed with non root而DPDK application is run with root privellege在 docker 图像内?如果是,您能否首先确保主机上的 DPDK 应用程序以非 root 身份运行。然后在docker内部运行相同的。这就是我为使其在 18.11 LTS 上运行所做的工作 -
@VipinVarghese 好吧.. 我实际上使用 helm 来部署 pod,因为联邦有些参与。 docker run 没有向我公开,但如果是,则 helm 命令以 root 身份在主节点上运行。我之前尝试在 /etc/security/limits.conf 中的节点上更改该限制(并重新启动),但它似乎没有像我预期的那样在容器中进行修改。不过这是个好主意,我看看 dpdk 是否在节点上以非 root 身份运行。