如何解决Docker容器中Nvidia Nsight Systems图形界面启动失败问题
我需要创建一个能运行Nvidia Nsight Systems图形界面的Docker容器,用来生成CUDA和Python应用的性能报告。构建容器过程顺利,但执行nsys-ui启动图形界面时出现如下错误:
################# ERROR: CrashReporter #################
CrashReporterQt initialization failed
Failed to load Qt platform plugin: "xcb"
Library path: /opt/nvidia/nsight-systems/2023.4.1/host-linux-x64/Plugins/platforms/ http://libqxcb.so
Application is going to abort
sh: 1: xmessage: not found
/usr/local/bin/nsys-ui: line 63: 38 Aborted (core dumped) "$NV_AGORA_PATH/CrashReporter" --hide-stack "NVIDIA Nsight Systems" "NsightSystems" "2023.4.1 (Build 2023.4.1.97-234133557503v0)" "$NV_QUADD_PATH" "$@"
""
我尝试在Dockerfile中添加libxcb-xinerama0、libxcb-cursor0等依赖库,但问题仍未解决。以下是我使用的Dockerfile、构建及运行命令,求可行的解决方案或完整Docker配置方案。
Dockerfile内容
FROM nvcr.io/nvidia/cuda:12.0.1-devel-ubuntu22.04 ENV DEBIAN_FRONTEND noninteractive RUN apt-get update -y && \ apt-get install -y --no-install-recommends \ apt-transport-https \ ca-certificates \ dbus \ fontconfig \ gnupg \ libasound2 \ libfreetype6 \ libglib2.0-0 \ libnss3 \ libsqlite3-0 \ libx11-xcb1 \ libxcb-glx0 \ libxcb-xkb1 \ libxcomposite1 \ libxcursor1 \ libxcb-xinerama0 \ libxdamage1 \ libxi6 \ libxml2 \ libxrandr2 \ libxrender1 \ libxtst6 \ libgl1-mesa-glx \ libxkbfile-dev \ openssh-client \ libxcb-cursor0\ wget \ xcb \ xkb-data && \ apt-get clean RUN cd /tmp && \ wget https://developer.nvidia.com/downloads/assets/tools/secure/nsight-systems/2023_4_1_97/nsight-systems-2023.4.1_2023.4.1.97-1_amd64.deb && \ apt-get install -y ./nsight-systems-2023.4.1_2023.4.1.97-1_amd64.deb && \ rm -rf /tmp/* # CMD ["nsys-ui"]
构建命令
docker build -f nsight-systems.Dockerfile --no-cache --tag=nsight-systems:2023.4 .
运行命令
docker run -it --rm --gpus all -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --cap-add=SYS_ADMIN --security-opt seccomp=unconfined -v $(pwd):/mnt --network=host nsight-systems:2023.4
启动命令
nsys-ui
1. 补充缺失的Qt xcb依赖库
你的Dockerfile中仍缺少部分xcb相关依赖,同时错误提示xmessage: not found,需添加以下包:
libxcb-util1 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-shape0 libxcb-sync1 libxcb-xfixes0 libxcb-xinput0 x11-utils
2. 更新后的Dockerfile
FROM nvcr.io/nvidia/cuda:12.0.1-devel-ubuntu22.04 ENV DEBIAN_FRONTEND noninteractive # 明确指定Qt平台插件路径 ENV QT_QPA_PLATFORM_PLUGIN_PATH=/opt/nvidia/nsight-systems/2023.4.1/host-linux-x64/Plugins/platforms RUN apt-get update -y && \ apt-get install -y --no-install-recommends \ apt-transport-https \ ca-certificates \ dbus \ fontconfig \ gnupg \ libasound2 \ libfreetype6 \ libglib2.0-0 \ libnss3 \ libsqlite3-0 \ libx11-xcb1 \ libxcb-glx0 \ libxcb-xkb1 \ libxcomposite1 \ libxcursor1 \ libxcb-xinerama0 \ libxdamage1 \ libxi6 \ libxml2 \ libxrandr2 \ libxrender1 \ libxtst6 \ libgl1-mesa-glx \ libxkbfile-dev \ openssh-client \ libxcb-cursor0 \ wget \ xcb \ xkb-data \ # 新增缺失依赖 libxcb-util1 \ libxcb-image0 \ libxcb-keysyms1 \ libxcb-render-util0 \ libxcb-shape0 \ libxcb-sync1 \ libxcb-xfixes0 \ libxcb-xinput0 \ x11-utils && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* RUN cd /tmp && \ wget https://developer.nvidia.com/downloads/assets/tools/secure/nsight-systems/2023_4_1_97/nsight-systems-2023.4.1_2023.4.1.97-1_amd64.deb && \ apt-get install -y ./nsight-systems-2023.4.1_2023.4.1.97-1_amd64.deb && \ rm -rf /tmp/*
3. 简化运行命令
无需额外的权限配置(除非有特殊需求),运行命令可简化为:
docker run -it --rm --gpus all -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v $(pwd):/mnt nsight-systems:2023.4
4. 主机端X权限配置
确保主机允许容器访问X服务器,执行:
xhost +local:root
(注:此为临时开放权限,若需永久配置可修改/etc/X11/Xwrapper.config或设置更严格的xhost规则)
验证启动
进入容器后执行nsys-ui,图形界面应可正常启动。
内容的提问来源于stack exchange,提问作者Gota_12

