Wiki
Docker直通
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
1.USB直通

- 方法一(不是很推薦新手):
建立容器的時候把需要的裝置加在紅色部分這裡即可。可以通過下面的命令檢視想要的裝置的名字。
ls /dev
#例如
--device=/dev/tty_USB0
- 方法二(個人更加推薦,不用重新再掛載了,雖然安全性會降低,但是別人利用安全許可權能夠攻擊你的機率很低很低,企業伺服器才需要提防):
--privileged
直接新增一行綠色部分,然後所有裝置都會被掛載到docker了。(紅色部分就不用寫了)

2.NVIDIA顯示卡直通
NVIDIA Container Toolkit使使用者 能夠構建和執行GPU加速的容器 。該工具包包括一個容器執行庫和實用程式,用於自動配置容器以利用NVIDIA GPU。

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
2.1.安裝
(儘量能看官方就看官方的,安裝方式可能會更新)
2.1.1.Ubuntu
- 配置儲存庫 並更新
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list \
&& \
sudo apt-get update
- 安裝nvidia-docker2
sudo apt-get install -y nvidia-docker2
- 使用nvidia-ctk命令配置container runtime
sudo nvidia-ctk runtime configure --runtime=docker
- 重啟docker服務:
sudo systemctl restart docker
2.1.2.Fedora
- Configure the production repository:
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
- Optionally, configure the repository to use experimental packages:
# 如果是RHEL或者Rocky(DNF4)
sudo dnf config-manager --add-repo https://nvidia.github.io/libnvidia-container/stable/rpm/libnvidia-container.repo
# 如果是Feodra41+(DNF5)
sudo dnf config-manager addrepo --from-repofile=https://nvidia.github.io/libnvidia-container/stable/rpm/libnvidia-container.repo
- Install the NVIDIA Container Toolkit packages:
# 如果是RHEL或者Rocky
sudo dnf install -y nvidia-container-toolkit
# 如果是Fedora
sudo dnf install -y nvidia-container-toolkit
- 安裝nvidia-docker2 : 在Fedora上使用
dnf進行安裝。
sudo dnf install -y nvidia-docker2
- 使用nvidia-ctk命令配置容器執行時 : 這個命令用於配置NVIDIA Container Toolkit與Docker整合。命令如下:
sudo nvidia-ctk runtime configure --runtime=docker
- 重啟Docker服務 : 完成配置後,必須重啟Docker服務以使更改生效:
sudo systemctl restart docker
這些步驟執行後,Docker將使用NVIDIA Container Runtime,並支援GPU加速的容器執行。你可以使用nvidia-smi命令來驗證容器中的NVIDIA GPU是否可用。
2.2.測試是否可用
- 執行nvidia cuda 容器進行測試 :
可以使用下面指令進行測試,docker會自動從nvidia/cuda拉取11.0.3-base-ubuntu20.04映象,並建立一個執行一次即刪除的容器。
sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi


3.Docker配置CUDA和CuDNN
如果你不需要自己建立Docker映象,直接使用學長或者其他人建立好的映象,則不用看該章節,容器的CUDA和CuDNN是和本地完全隔離的環境,你本地有沒有CUDA都無所謂,但輝達驅動版本必須滿足CUDA的最低版本要求。
下面是如果你想自己建立映象,則可以在學會如何建立容器的映象後再回來看本節:
https://hub.docker.com/r/nvidia/cuda
在上方這個網站中,輝達都幫我們配置好了CUDA和CuDNN了,我們根本不需要自己去配置了,比傳統方式要簡單太多太多了。
我們只需要找到對應的Docker映象當底包即可。
CUDA映象有三個型別,如下,如果我們需要編譯OpenCV4,那麼需要使用devel版的CUDA。
| 映象型別 | 適用場景 | 示例標籤 | 大小 |
|---|---|---|---|
| base | 僅需 CUDA 執行時庫 | 12.4.0-base-ubuntu22.04 | ~240MB |
| runtime | 部署編譯後的應用(含數學庫) | 12.4.0-runtime-ubuntu22.04 | ~2GB |
| devel | 開發環境(含編譯工具) | 12.4.0-devel-ubuntu22.04 | ~3GB |
我示例一個,比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN,那麼就選擇nvidia/cuda:12.6.0-cudnn-devel-ubuntu24.04。這個映象既有CUDA-devel也有CuDNN,而且還是基於Ubuntu24.04的。

在dockerfile裡就可以開頭這麼寫。
# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像
FROM nvidia/cuda:12.6.0-cudnn-devel-ubuntu24.04
4.配置乙太網路
--net=host \
啟動引數里加上這行即可。具體在下方。