故障排除#
Docker 故障排除#
生成调试日志#
对于大多数常见问题,您可以生成调试日志,以帮助识别问题的根本原因。要生成调试日志
编辑您的运行时配置,位于
/etc/nvidia-container-runtime/config.toml
下,并取消注释debug=...
行。再次运行您的容器以重现问题并生成日志。
生成核心转储#
在发生严重故障时,可以自动生成核心转储,并可以帮助排除问题。请参阅 core(5) 以生成这些转储。特别地,请检查以下项目
/proc/sys/kernel/core_pattern
是否已正确设置,并指向具有写入权限的位置。ulimit -c
是否设置为合理的默认值。
如果 nvidia-container-cli
进程变得无响应,也可以使用 gcore(1)。
运行 apt update 时出现选项 Signed-By 冲突值错误#
在 Ubuntu 或基于 Debian 的系统上按照安装说明更新软件包存储库时,可能会触发以下错误
$ sudo apt-get update
E: Conflicting values set for option Signed-By regarding source https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64/ /: /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg !=
E: The list of sources could not be read.
这由以下两个原因组合引起
最近更新的安装说明,用于创建 repo 列表文件
/etc/apt/sources.list.d/nvidia-container-toolkit.list
apt-key
的弃用意味着signed-by
指令包含在 repo 列表文件中
如果触发此错误,则表示存在对同一存储库的另一个引用,但未指定 signed-by
指令。最有可能的候选项是文件夹 /etc/apt/sources.list.d/
中的一个或多个文件 libnvidia-container.list
、nvidia-docker.list
或 nvidia-container-runtime.list
。
可以通过运行并检查输出来获得冲突的存储库引用
$ grep "nvidia.github.io" /etc/apt/sources.list.d/*
可以通过运行以下命令来获得可能存在冲突引用的文件列表
$ grep -l "nvidia.github.io" /etc/apt/sources.list.d/* | grep -vE "/nvidia-container-toolkit.list\$"
删除列出的文件应解决原始错误。
在 SELinux 下运行 nvidia-docker 包装器时出现权限被拒绝错误#
在 SELinux 环境下运行 nvidia-docker
包装器(由 nvidia-docker2
软件包提供)时,可能会看到以下错误
$ sudo nvidia-docker run --gpus=all --rm nvcr.io/nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
/bin/nvidia-docker: line 34: /bin/docker: Permission denied
/bin/nvidia-docker: line 34: /bin/docker: Success
SELinux 报告以下错误
SELinux is preventing /usr/bin/bash from entrypoint access on the file /usr/bin/docker. For complete SELinux messages run: sealert -l 43932883-bf2e-4e4e-800a-80584c62c218
SELinux is preventing /usr/bin/bash from entrypoint access on the file /usr/bin/docker.
***** Plugin catchall (100. confidence) suggests **************************
If you believe that bash should be allowed entrypoint access on the docker file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c 'nvidia-docker' --raw | audit2allow -M my-nvidiadocker
# semodule -X 300 -i my-nvidiadocker.pp
发生这种情况是因为 nvidia-docker
将命令行参数以少量修改转发到 docker
可执行文件。
要解决此问题,请在 docker
命令中指定 NVIDIA 运行时
$ sudo docker run --gpus=all --runtime=nvidia --rm nvcr.io/nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
或者,可以按照建议生成本地 SELinux 策略
$ ausearch -c 'nvidia-docker' --raw | audit2allow -M my-nvidiadocker
$ semodule -X 300 -i my-nvidiadocker.pp
NVML:权限不足和 SELinux#
根据您的 Red Hat Enterprise Linux 系统配置 SELinux 的方式,您可能需要在 Docker 或 Podman 命令行上指定 --security-opt=label=disable
,以共享主机操作系统中无法重新标记的部分。如果没有此选项,您在运行 GPU 容器时可能会观察到此错误:Failed to initialize NVML: Insufficient Permissions
。但是,使用此选项会禁用容器中的 SELinux 分离,并且容器在非受限类型中执行。请查看系统上的 SELinux 策略。