首页 > 解决方案 > Docker 权限不足,无法设置线程优先级

问题描述

在 Docker 上运行多线程库时出现此错误。

Insufficient permissions to set thread priority. Please retry as root.

因此,我尝试使用选项运行映像,该-u选项指定使用 id 为 0 的 root 用户运行/bin/bash

docker run -u 0 --rm -it img bash

或者

docker run -u root --rm -it img bash

如果我运行命令而不是 bash,也会发生同样的情况

docker run -u root --rm -it img './threading_test'

但实际上它并没有解决权限问题,并且仍然出现错误。

[更新]

添加Dockerfile

FROM ubuntu:18.04
MAINTAINER Loreto Parisi loretoparisi@gmail.com
RUN apt-get update && apt-get install -y libcap2-bin
COPY ./src .
CMD ["./y-cruncher"]

我添加了默认情况下未安装libcap2-binsince 命令。capsh正如建议的那样,capsh --print功能检查将返回

root@d24d02a2ee8c:/# capsh --print
Current: = cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_sys_nice,cap_mknod,cap_audit_write,cap_setfcap+eip
Bounding set =cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_sys_nice,cap_mknod,cap_audit_write,cap_setfcap
Securebits: 00/0x0/1'b0
 secure-noroot: no (unlocked)
 secure-no-suid-fixup: no (unlocked)
 secure-keep-caps: no (unlocked)
uid=0(root)
gid=0(root)
groups=

运行命令是docker run --rm -it --cap-add=sys_nice y-cruncher因为我已经设置CMD ["./y-cruncher"]Dockerfile默认值。

标签: dockerdockerfile

解决方案


通常,您需要赋予容器CAP_SYS_NICE设置优先级的能力。

y-cruncher 需要以 root 用户运行,否则会出现错误消息

赋予CAP_SYS_NICE能力前的测试:

Launching y-cruncher...
================================================================
Insufficient permissions to set thread priority. Please retry as root.
Further messages for this warning will be suppressed.
Checking processor/OS features...
Required Features:
    x64, ABM, BMI1, BMI2, ADX,
    SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
    AVX, FMA3, AVX2
Parsing Core -> Handle Mappings...
    Cores:  0-3 
Parsing NUMA -> Core Mappings...
    Node  0:  0-3 
y-cruncher v0.7.7 Build 9499                ( www.numberworld.org )
Copyright 2008-2020 Alexander J. Yee      ( a-yee@u.northwestern.edu )

赋予CAP_SYS_NICE能力后的测试:--cap-add=sys_nice ubuntu:latest

Launching y-cruncher...
================================================================
Checking processor/OS features...
Required Features:
    x64, ABM, BMI1, BMI2, ADX,
    SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
    AVX, FMA3, AVX2
Parsing Core -> Handle Mappings...
    Cores:  0-3 
Parsing NUMA -> Core Mappings...
    Node  0:  0-3 
y-cruncher v0.7.7 Build 9499                ( www.numberworld.org )
Copyright 2008-2020 Alexander J. Yee      ( a-yee@u.northwestern.edu )

值得一提的是,确保内核本身启用了所需的功能,capsh --printCAP_SYS_NICE默认情况下应该存在于主机上


推荐阅读