
cschranz/gpu-jupyter!Github Workflow 确保实验环境一致性。若输出类似以下内容,则表示配置成功(需注意 CUDA 版本与本地驱动兼容性,建议 NVIDIA 驱动版本 ≥ 520):bashdocker run --rm --gpus all nvidia/cuda:12.6.3-cudnn-runtime-ubuntu24.04 nvidia-smi
Fri Feb 28 13:13:06 2025 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 560.35.04 Driver Version: 561.17 CUDA Version: 12.6 | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA GeForce RTX 3060 ... On | 00000000:01:00.0 On | N/A | | N/A 46C P8 11W / 60W | 223MiB / 6144MiB | 15% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+
进入工作目录并创建数据文件夹(默认挂载路径):
bashcd your-working-directory mkdir -p data # 宿主机数据目录,将与容器共享
启动 GPU-Jupyter 容器:
bashdocker run --gpus all -d -it -p 8848:8888 \ -v $(pwd)/data:/home/jovyan/work \ -e GRANT_SUDO=yes \ -e JUPYTER_ENABLE_LAB=yes \ --user root \ cschranz/gpu-jupyter:v1.9_cuda-12.6_ubuntu-24.04
--gpus all:启用所有 GPU-p 8848:8888:端口映射(宿主机:容器)-v $(pwd)/data:/home/jovyan/work:挂载数据卷(宿主机数据目录 → 容器工作目录)-e GRANT_SUDO=yes:允许 root 用户执行 sudo-e JUPYTER_ENABLE_LAB=yes:启动 JupyterLab(而非传统 Notebook)--user root:以 root 用户运行容器获取登录令牌:
bashdocker exec -it [容器ID/名称] jupyter server list
输出示例:
[JupyterServerListApp] Currently running servers: [JupyterServerListApp] [***] :: /home/jovyan
复制令牌,在浏览器访问 http://localhost:8848 并粘贴令牌登录。登录后可在 http://localhost:8848/login 设置密码(原默认密码 gpu-jupyter)。
Docker Hub 提供以下镜像变体(以 v1.9 为例):
v1.9_cuda-12.6_ubuntu-24.04:全功能版(含 Python/R/Julia 及完整工具栈)v1.9_cuda-12.6_ubuntu-24.04_python-only:仅含 Python 解释器(无 R/Julia)v1.9_cuda-12.6_ubuntu-24.04_slim:精简版(仅 Python,无额外工具包)其他版本(如 v1.8_cuda-12.5_ubuntu-22.04、v1.7_cuda-12.3_ubuntu-22.04 等)及旧版本标签见 Docker Hub。
v1.5_cuda-12.0_ubuntu-22.04 系列v1.4_cuda-11.6_ubuntu-20.04 系列v1.4_cuda-11.2_ubuntu-20.04 系列v1.4_cuda-10.1_ubuntu-18.04 系列如需自定义工具包或适配特定 GPU 架构,建议构建自定义镜像:
克隆仓库并切换版本分支:
bashgit clone [***] cd gpu-jupyter git checkout v1.9_cuda-12.6_ubuntu-24.04 # 选择或创建版本分支
生成 Dockerfile(支持自定义参数,见 配置说明):
bash# 生成仅含 Python 的 Dockerfile(不含 Julia 和 R) ./generate-Dockerfile.sh --python-only
构建镜像:
bashdocker build -t gpu-jupyter .build/ # 耗时较长,需耐心等待
启动自定义容器:
bashdocker run --gpus all -d -it -p 8848:8888 \ -v $(pwd)/data:/home/jovyan/work \ -e GRANT_SUDO=yes \ -e JUPYTER_ENABLE_LAB=yes \ -e NB_UID="$(id -u)" \ # 同步宿主机用户 UID(避免权限问题) -e NB_GID="$(id -g)" \ # 同步宿主机用户 GID --user root \ --restart always \ # 容器异常时自动重启 --name gpu-jupyter_1 \ # 指定容器名称 gpu-jupyter
创建 docker-compose.yml(参考仓库示例):
yamlversion: '3.8' services: gpu-jupyter: build: .build/ ports: - "8848:8888" volumes: - ./data:/home/jovyan/work environment: - GRANT_SUDO=yes - JUPYTER_ENABLE_LAB=yes - NB_UID=${UID} - NB_GID=${GID} user: root deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] restart: always
启动服务:
bashdocker-compose up --build -d # 构建并后台运行 docker-compose ps # 检查状态 docker-compose logs -f # 查看日志 docker-compose down # 停止服务
注意:需 Docker Compose 版本 ≥ 1.28.0 以支持 GPU 资源配置。
查看运行中容器:
bashdocker ps # 查看运行中容器(加 -a 查看所有容器)
查看容器资源占用:
bashdocker stats # 实时监控 CPU/内存/网络/磁盘使用
查看容器日志:
bashdocker logs [容器ID/名称] -f # -f 实时跟踪日志
进入容器终端:
bashdocker exec -it [容器ID/名称] bash # 交互式终端
停止并删除容器:
bashdocker rm -f [容器ID/名称]
generate-Dockerfile.sh 脚本用于生成自定义 Dockerfile,支持以下参数(互斥,每次仅选一个):
| 参数 | 说明 |
|---|---|
--help | 显示帮助信息 |
--slim | 精简版:仅含 Python 解释器,不含 R/Julia 及 custom/usefulpackages.Dockerfile 中的工具包 |
--python-only | Python 专用版:不含 R/Julia,但包含 custom/usefulpackages.Dockerfile 工具包 |
--no-useful-packages | 基础版:含 R/Julia,但不含 custom/usefulpackages.Dockerfile 工具包 |
| `-p | --password [密码]` |
| `-c | --commit [commit ID]` |
| 环境变量 | 说明 | 默认值/示例 |
|---|---|---|
GRANT_SUDO | 是否允许 sudo 权限 | no(建议设为 yes) |
JUPYTER_ENABLE_LAB | 是否启动 JupyterLab | yes |
JUPYTER_TOKEN | 静态登录令牌(UUID 格式,避免容器重启后令牌变更) | 自动生成(通过 uuidgen 生成自定义令牌) |
NB_UID | 容器内用户 UID(需与宿主机一致以解决文件权限问题) | 1000 |
NB_GID | 容器内用户 GID | 1000 |
避免直接修改 .build/Dockerfile(每次生成会覆盖),建议通过以下方式添加自定义包:
custom/usefulpackages.Dockerfile,添加 apt/pip 安装命令:
dockerfile# 示例:安装额外 Python 包 RUN pip install --no-cache-dir \ "package1==x.y.z" \ "package2" # 安装系统依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ package3 \ && rm -rf /var/lib/apt/lists/*
bash./generate-Dockerfile.sh --python-only # 重新生成 docker build -t gpu-jupyter .build/ # 重新构建
设置静态令牌
生成 UUID 令牌:
bashexport JUPYTER_TOKEN=$(uuidgen) echo $JUPYTER_TOKEN # 保存令牌备用
启动容器时传入令牌:
bashdocker run --gpus all -d -it -p 8848:8888 \ -e JUPYTER_TOKEN=${JUPYTER_TOKEN} \ ... # 其他参数
设置自定义密码
http://localhost:8848/login,使用令牌登录后设置新manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务