Jupyter Docker Stacks 使用指南:基于 Quay.io 的即开即用 Jupyter 镜像快速上手
云原生开发工具数据科学【免费下载链接】docker-stacksReady-to-run Docker images containing Jupyter applications项目地址https://gitcode.com/gh_mirrors/do/docker-stacks点击查看免费下载Jupyter Docker Stacks 是 Jupyter 官方维护的一组即拉即用ready-to-runDocker 镜像集内置 Jupyter 应用与交互式计算工具覆盖从个人开发到 JupyterHub 团队协作、再到自定义项目镜像的各种场景。本文以仓库根目录的 README.md 为骨架结合 images/ 下的 Dockerfile 与启动脚本源码系统讲解镜像的拉取、运行、前端切换、挂载与用户配置等实战细节读完即可在自己的机器上跑起一个带 JupyterLab 的完整数据科学环境。项目概览Jupyter Docker Stacks 是什么Jupyter Docker Stacks 是由 Jupyter 社区维护的一组 Docker 镜像集合其定位是包含 Jupyter 应用与交互式计算工具的即开即用镜像。镜像统一发布在 Quay.io 的jupyter组织下https://quay.io/organization/jupyter。使用某个 Stack 镜像你可以完成以下事情且不限于启动一个带JupyterLab 前端默认的个人 Jupyter Server借助JupyterHub为团队运行 JupyterLab在本地 Docker 容器中启动带Jupyter Notebook 前端的个人 Jupyter Server基于 Stack 镜像编写你自己的项目 Dockerfile。从仓库的镜像目录结构可以看出这些镜像并非彼此孤立而是层层继承的关系见 images/ 目录下的各 Dockerfiledocker-stacks-foundation最底层基础镜像基于 Ubuntu 24.04安装 Conda/Mamba、Python 与jupyter_core定义默认用户jovyanUID 1000GID 100以及tini入口与启动脚本体系images/docker-stacks-foundation/Dockerfilebase-notebook在 foundation 之上安装 JupyterHub、JupyterLab、NBClassic 与 Notebook定义JUPYTER_PORT8888与默认 CMDstart-notebook.pyimages/base-notebook/Dockerfileminimal-notebook在 base-notebook 之上补充 curl、git、vim、TeX 等通用工具与nbconvert依赖images/minimal-notebook/Dockerfilescipy-notebook、r-notebook、julia-notebook、datascience-notebook、pyspark-notebook、all-spark-notebook、pytorch-notebook、tensorflow-notebook分别在更底层镜像上叠加各自生态的科学计算栈。注意自2023-10-20起新镜像只推送到Quay.io注册表Docker Hub 上只有旧版本镜像且不再更新。因此下面的命令统一使用quay.io/jupyter/...前缀。快速开始两个标准启动示例示例一最小启动前台常驻docker run -p 10000:8888 quay.io/jupyter/scipy-notebook:2026-07-28这条命令的作用是如果本地没有jupyter/scipy-notebook标签为2026-07-28的镜像则先从 Quay.io 拉取然后启动一个容器运行带JupyterLab 前端的 Jupyter Server并把容器内部端口8888映射到宿主机的10000端口。访问方式为在浏览器中打开http://hostname:10000/?tokentoken其中hostname是运行 Docker 的计算机名称token是容器启动时在控制台打印的密钥令牌。几个关键细节想修改宿主机端口直接改-p选项的前半段即可例如-p 8888:8888默认情况下Jupyter Server 退出后容器保持完好可随时重启文件系统状态得以保留8888端口来自镜像构建时定义的ENV JUPYTER_PORT8888与EXPOSE $JUPYTER_PORT见 images/base-notebook/Dockerfile。示例二临时容器 挂载宿主机目录docker run -it --rm -p 10000:8888 -v ${PWD}:/home/jovyan/work quay.io/jupyter/datascience-notebook:2026-07-28相比示例一这条命令引入了三个关键参数-v ${PWD}:/home/jovyan/work把宿主机当前工作目录${PWD}挂载为容器内的/home/jovyan/work实现代码与数据在宿主机和容器之间的持久化交换--rm容器退出时由 Docker 自动清理并删除其文件系统。但注意你在容器内对~/work目录及其文件做的任何修改都会保留在宿主机上因为该目录是挂载卷-i/-t分别保持容器的STDIN打开可向容器标准输入发送内容和分配伪 TTY交互式终端体验Server 日志会直接输出在终端中。访问地址同样是http://hostname:10000/?tokentoken。关于默认保存目录默认情况下 Jupyter 的root_dir是/home/jovyan新 Notebook 会保存到该目录除非你在文件浏览器中切换目录。若想修改默认目录需要在启动命令追加 Jupyter Server 配置参数例如docker run -it --rm -p 10000:8888 -v ${PWD}:/home/jovyan/work quay.io/jupyter/datascience-notebook:2026-07-28 \ start-notebook.py --ServerApp.root_dir/home/jovyan/work这里把ServerApp.root_dir指定为挂载进来的/home/jovyan/work新 Notebook 便会默认保存在该目录。root_dir是 Jupyter Server 的核心配置项完整配置说明见 Jupyter Server 官方文档的 full-config 一节。示例一与示例二的选择建议对比维度示例一示例二容器生命周期退出后保留可重启退出即删除--rm数据持久化仅容器文件系统宿主机目录挂载改动落盘交互性后台/前台均可-it交互式终端查看日志适用场景长期运行的 Server临时试验、代码开发选择 Jupyter 前端JupyterLab 与 Notebook 切换JupyterLab 是 Jupyter Docker Stacks 全部镜像的默认前端。如果你希望切回经典 Jupyter Notebook或在容器启动时执行其他jupyter子命令可以在启动容器时传入环境变量docker run -p 10000:8888 -e DOCKER_STACKS_JUPYTER_CMDnotebook quay.io/jupyter/base-notebook:latestDOCKER_STACKS_JUPYTER_CMD的值可以是任意合法的jupyter子命令lab、notebook、nbclassic、server、retro等。从源码看这一机制的实现位于 images/base-notebook/start-notebook.pyjupyter_command os.environ.get(DOCKER_STACKS_JUPYTER_CMD, lab) command.append(jupyter_command)即读取环境变量缺省时回落到lab。该脚本随后还会把可选的NOTEBOOK_ARGS环境变量用shlex.split正确切分后的多个参数以及命令行传入的其他参数一并拼进最终的jupyter ...命令再通过os.execvp替换进程执行start-notebook.py。深入源码一个容器启动的背后发生了什么理解镜像即开即用的底层机制有助于排查问题与自定义行为。整个启动链可以拆成三步第一步tini初始化进程与start.sh镜像的 ENTRYPOINT 是见 images/docker-stacks-foundation/DockerfileENTRYPOINT [tini, -g, --, start.sh]tini是一个轻量级 init 系统负责回收僵尸进程、正确处理信号转发避免 Jupyter Server 的子进程失控start.sh是真正的人口脚本images/docker-stacks-foundation/start.sh它支持大量环境变量NB_USER/NB_UID/NB_GID/NB_GROUP重命名默认用户jovyan、调整 UID/GID并搬迁或软链家目录GRANT_SUDO取值1或yes为用户授予免密 sudo权限CHOWN_HOME取值1或yes确保家目录归属目标用户CHOWN_EXTRA逗号分隔的额外目录列表逐一对它们执行chownJUPYTER_ENV_VARS_TO_UNSET逗号分隔的环境变量名列表在启动前统一unsetRESTARTABLEyes配合run-one-constantly使进程可耐受重启见 images/base-notebook/start-notebook.py。以 root 启动容器时start.sh会先改造jovyan用户重命名、改 UID/GID、迁移家目录然后通过sudo --preserve-env --set-home --user ${NB_USER}降权执行后续命令以非 root 启动时则直接以当前用户执行并对无法生效的配置如改名、改 UID给出警告日志。第二步启动钩子机制startup hooksstart.sh中调用了/usr/local/bin/run-hooks.sh对/usr/local/bin/start-notebook.d与/usr/local/bin/before-notebook.d两个目录中的钩子按序执行见 images/docker-stacks-foundation/start.sh 与 run-hooks.sh.sh文件会被source在同一 shell 上下文中生效其他可执行文件会被直接运行非可执行文件会被忽略并记录日志单个钩子失败只会记录错误并继续执行后续钩子不会中断启动。仓库已经预置了一个钩子10activate-conda-env.sh位于 images/docker-stacks-foundation/10activate-conda-env.sh用于在启动前激活 Conda 环境。这意味着你可以通过向这两个目录追加自己的脚本实现完全个性化的启动定制。第三步start-notebook.py决定启动哪个 Jupyter 子命令base-notebook镜像的默认 CMD 是start-notebook.pyimages/base-notebook/Dockerfile。该脚本images/base-notebook/start-notebook.py的核心逻辑若环境变量中存在JUPYTERHUB_API_TOKEN说明运行在 JupyterHub 中则自动把控制权转交给start-singleuser.py由它启动jupyterhub-singleuser见 start-singleuser.py并打印提示警告否则按DOCKER_STACKS_JUPYTER_CMD默认lab构造jupyter cmd命令追加NOTEBOOK_ARGS与命令行剩余参数最终execvp执行。附加配置jupyter_server_config.py镜像构建时通过jupyter server --generate-config生成默认配置并把仓库自带的 jupyter_server_config.py 复制到/etc/jupyter/。该文件做了几件关键事情c.ServerApp.ip 在所有网络接口IPv4/IPv6上监听便于容器外部访问c.ServerApp.open_browser False容器内不自动打开浏览器c.InlineBackend.figure_formats {png, jpeg, svg, pdf}使 matplotlib 内联输出同时支持多种格式c.FileContentsManager.delete_to_trash False删除文件时直接删除而非进回收站设置环境变量GEN_CERT时会生成一个自签名 RSA-2048 证书有效期为 365 天并配置为 Server 证书用于 HTTPS 访问设置NB_UMASK时会为 Server 的所有子进程修改默认 umask。此外镜像还内置了健康检查HEALTHCHECK通过/etc/jupyter/docker_healthcheck.py每 3 秒检查一次超时 1 秒、启动期 3 秒、连续失败 3 次判定不健康images/base-notebook/Dockerfile。CPU 架构与多平台镜像项目同时发布x86_64与aarch64两种平台的容器并有以下发布策略均来自 README.md 的 CPU Architectures 一节单平台镜像使用aarch64-或x86_64-标签前缀区分例如quay.io/jupyter/base-notebook:aarch64-python-3.13.14自2022-09-21起除tensorflow-notebook外的镜像都发布**多平台multi-platform**镜像自2023-06-01起tensorflow-notebook也发布多平台镜像自2024-02-24起发布pytorch-notebook的CUDA 变体面向x86_64自2024-03-26起发布tensorflow-notebook的 CUDA 变体面向x86_64自2025-12-02起pytorch-notebook与tensorflow-notebook的 CUDA 变体也覆盖aarch64。仓库中对应的 CUDA 变体 Dockerfile 位于 images/pytorch-notebook/cuda12/Dockerfile、images/pytorch-notebook/cuda13/Dockerfile 与 images/tensorflow-notebook/cuda/Dockerfile 等路径供有 GPU 加速需求的用户参考。使用旧镜像固定 Ubuntu / Python 版本的镜像表项目每次只构建一套镜像即只维护当前最新的 Ubuntu 与 Python 版本。如果你想使用较旧的 Ubuntu 和/或 Python 版本可选用下表所列的历史构建版本tag 为构建日期对应的镜像标签构建日期UbuntuPython标签Tag2022-10-0920.043.71aac87eb7fa52022-10-0920.043.8a374cab4fcb62022-10-0920.043.95ae537728c692022-10-0920.043.10f3079808ca8c2022-10-0922.043.7b86753318aa12022-10-0922.043.87285848c0a112022-10-0922.043.9ed2908bbb62e2023-05-3022.043.104d70cf8da9532024-08-2622.043.1100987883e58d2024-10-2224.043.11b744182207682025-08-1124.043.1282d322f00937每周构建weekly build24.043.13latest也就是说若需要 Python 3.7 Ubuntu 20.04 的环境可以拉取带1aac87eb7fa5标签的镜像需要最新环境则使用latest每周自动构建。在 Binder 上免安装体验如果你暂时不想在本地安装 Docker项目还提供了基于quay.io/jupyter/base-notebook的 Binder 在线体验入口通过https://mybinder.org打开后可直接在浏览器中浏览仓库根目录的README.ipynb示例该 Notebook 位于 binder/README.ipynb。这是快速评估镜像行为与 Notebook 渲染效果的最便捷方式。自定义镜像从 Stack 起步除了直接docker run你也可以把任意 Stack 镜像作为基础编写自己的项目 Dockerfile。从源码角度各镜像的构建都支持通过ARG REGISTRY、ARG OWNER与ARG BASE_IMAGE控制基础镜像来源例如 images/base-notebook/Dockerfile 与 images/scipy-notebook/DockerfileARG REGISTRYquay.io ARG OWNERjupyter ARG BASE_IMAGE$REGISTRY/$OWNER/docker-stacks-foundation FROM $BASE_IMAGE此外镜像在构建时采用USER ${NB_UID}/USER ${NB_UID}的用户切换与fix-permissions权限修正策略images/docker-stacks-foundation/fix-permissions确保以默认用户jovyan运行。自定义镜像时建议沿用这套用户与权限约定避免以 root 运行应用。延伸资源与许可项目相关的进一步资料使用指南、镜像选择、贡献规范等集中存放在 docs/ 文档目录与tagging/镜像标签工具、tests/自动化测试等目录中镜像的完整使用说明以 ReadTheDocs 上的 User Guide 为准。本项目采用Modified BSD License即 New / Revised / 3-Clause BSD授权源码文件中统一使用如下版权横幅见 README.md 的 Our Copyright Policy 一节# Copyright (c) Jupyter Development Team. # Distributed under the terms of the Modified BSD License.Jupyter 项目采用共享版权模式每位贡献者保留对其自身贡献的版权而仓库整体代码的版权归整个 Jupyter Development Team 共同所有。小结从 README.md 出发结合 images/ 目录下的 Dockerfile 与启动脚本可以得出 Jupyter Docker Stacks 的完整使用路径跑起来docker run -p 10000:8888 quay.io/jupyter/stack:tag浏览器访问http://hostname:10000/?tokentoken换前端设置环境变量DOCKER_STACKS_JUPYTER_CMDnotebook即可从 JupyterLab 切回 Notebook持久化用-v ${PWD}:/home/jovyan/work挂载宿主机目录配合--ServerApp.root_dir/home/jovyan/work修改默认保存位置定制化理解start.sh→ 启动钩子 →start-notebook.py的三级启动链通过钩子目录、GEN_CERT、NB_UMASK等机制按需扩展挑版本需要旧 Ubuntu/Python 时对照历史镜像表拉取指定 tag需要 GPU 能力时选用带 CUDA 变体的pytorch-notebook与tensorflow-notebook。这套镜像既是个人数据科学工作台的快速启动器也是团队 JupyterHub 与自研镜像的可靠基座。赞分享云原生开发工具数据科学【免费下载链接】docker-stacksReady-to-run Docker images containing Jupyter applications项目地址https://gitcode.com/gh_mirrors/do/docker-stacks点击查看免费下载相关推荐终极指南如何快速上手Jupyter Docker Stacks即开即用镜像方案终极指南如何快速上手Jupyter Docker Stacks即开即用镜像方案 Jupyter Docker Stacks是一套精心设计的即开即用Docker云原生开发工具数据科学终极指南如何快速使用Docker-Stacks与AWS Lambda容器镜像部署Jupyter函数终极指南如何快速使用Docker Stacks与AWS Lambda容器镜像部署Jupyter函数 Docker Stacks是GitHub加速计划中的一个强云原生开发工具数据科学Jupyter docker-stacks 结合 Source-to-Image 实践将 Notebook 仓库打包为即拉即跑镜像并部署到 OpenShiftJupyter docker stacks 结合 Source to Image 实践将 Notebook 仓库打包为即拉即跑镜像并部署到 OpenShift云原生开发工具数据科学上一篇LogicFlow 渲染与数据render、getGraphData 与 adapterIn/adapterOut 数据适配器全解析下一篇ViViD推理结果不理想10个参数调整技巧提升效果创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考