直接用docker run启动官方镜像虽能快速验证,但默认无密码、无持久化、不可远程访问;需通过-p映射端口、-v挂载~/jupyter/notebooks到/home/jovyan/work实现文件保存,并用--notebookapp.password='sha1:xxx'设哈希密码替代token,避免明文泄露。

直接用 docker run 启动官方镜像就能跑起来,但默认没密码、没持久化、不能访问——这些才是实际部署时卡住人的地方。
怎么拉镜像并快速验证是否能跑通
别从 docker search jupyter 里随便选,优先用官方维护的稳定镜像:
-
jupyter/base-notebook:最小依赖,适合自己装包; -
jupyter/scipy-notebook:带 NumPy/Pandas/Matplotlib,日常分析够用; -
jupyter/datascience-notebook:含 TensorFlow/PyTorch/Scikit-learn,机器学习项目首选。
执行这行命令拉取并立即试运行(不加任何配置):
docker run -it --rm -p 8888:8888 jupyter/scipy-notebook
终端会输出一串以 ?token= 开头的 URL,复制粘贴到浏览器即可打开。如果打不开,大概率是防火墙或云服务器安全组没放行 8888 端口。
为什么容器一重启就丢 notebook 文件
因为容器内文件默认是临时的,关掉就清空。必须挂载宿主机目录才能持久化:
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
- 先在宿主机建好目录:
mkdir -p ~/jupyter/notebooks; - 启动时用
-v映射进去:-v ~/jupyter/notebooks:/home/jovyan/work; - 注意路径必须是
/home/jovyan/work——这是官方镜像里预设的工作目录,写错就映射失败; - 不要映射整个
/home/jovyan,否则可能覆盖用户配置、导致启动报错。
完整示例:
docker run -d -p 8888:8888 \ -v ~/jupyter/notebooks:/home/jovyan/work \ jupyter/scipy-notebook
怎么去掉 token 或设密码登录
默认每次启动都生成随机 token,不方便远程访问。两种常用做法:
- 禁用 token(仅限内网可信环境):
--NotebookApp.token=''; - 用哈希密码替代(推荐):先在本地 Python 中生成哈希值:
from notebook.auth import passwd; passwd("your_password"),然后传入--NotebookApp.password='sha1:xxx'; - 千万别在命令行里直接写明文密码,会被
ps或 shell history 泄露; - 如果用了
jupyter_notebook_config.py配置文件,记得挂载进去:-v ~/jupyter-config:/home/jovyan/.jupyter。
Docker Compose 部署更稳,但要注意几个坑
单容器用 docker run 就够,但要加监控、日志、自动重启或连数据库,就得上 docker-compose.yml:
-
restart: unless-stopped必加,否则容器崩溃后不会自启; -
environment里设JUPYTER_ENABLE_LAB=yes才能默认开 JupyterLab; - 端口映射写成
"8888:8888",别漏引号,YAML 对格式敏感; - 如果用
build: .自定义镜像,确保 Dockerfile 里CMD调用的是start-notebook.sh,不是裸jupyter notebook,否则信号处理和权限会出问题。
配置文件里最常漏的一行是:GRANT_SUDO=yes ——没它,notebook 里执行系统命令(比如 !pip install)会 Permission denied。
真正麻烦的不是启动,而是后续维护:比如想升级 Python 包版本,得重建镜像;想换内核(R/Julia),得确认基础镜像是否支持;多人共用时,jovyan 用户权限和 /home/jovyan 目录归属稍不注意就会变成 root 写入、普通用户读不了。










