JupyterLab Docker 部署踩坑

最近手上收集了一些数据,想要分析一下。而后想起来好久前就打算给本身搭一个 Jupyter Lab 环境,择日不如撞日,干脆就今天搞定。python

那么什么是 Jupyter Notebook 呢?

Juptyer Notebook 是从 IPython 演变出来的在线交互式计算环境,能够编写文档,这个文档能够包含代码、文本(Markdown)、数学、图标和富媒体。Jupyter LabJupyter Notebook 的下一代用户界面。nginx

简单上手

单纯跑一个 Jupyter 实际上是很简单的:git

pip install jupyterlab
jupyter lab
复制代码

上面的命令就能够跑起来一个 Jupyter 了,只不过须要 Python 环境。github

由于我要跑在服务器上,不但愿服务器的环境太过杂乱,这样迁移起来就会很麻烦,因此最好跑在 Docker 里。docker

不幸的是我在实践 Docker 部署的过程当中踩了不少坑,脑壳都给踩懵了。并且这部分恰恰网上资料比较少,只有官方文档和部分博客有涉及。因此我在此记录下个人踩坑历程,但愿对后人有所帮助。shell

因此我都遇到了什么问题?

  1. Docker 挂载后没法启动,提示权限被拒
  2. 启动后设置密码报 500 错误
  3. 启动后设置密码不生效
  4. 新建文件报 404 错误

我大体就遇到了上面这些问题,各个都很奇葩。接下来,敬请观赏我心酸的心路历程:json

Docker 挂载匿名券后 jupyter 容器没法启动

其实直接跑起来容器,是不会报错的,可是这样咱们的数据也就跟容器共生共死了,这可不能接受。api

因此须要将 Jupyter 的数据路径映射到宿主机。接下来就出问题了,启动报错:跨域

Container must be run with group "users" to update files
Executing the command: jupyter lab
Traceback (most recent call last):
  File "/opt/conda/lib/python3.7/site-packages/traitlets/traitlets.py", line 528, in get
    value = obj._trait_values[self.name]
KeyError: 'runtime_dir'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
"""堆栈信息隐藏掉"""
PermissionError: [Errno 13] Permission denied: '/home/jovyan/.local'
复制代码

开始我怀疑是 SELinux 搞鬼,设置后并无效果,并且其余镜像跑起来也很正常,一时间没有想出什么好办法,只好直接将挂载的路径权限改为 777 后正常启动了(原本是 755)。这操做...明明其余镜像一样权限都没问题...bash

启动后初始化密码报 500 错误

终于启动成功了,很开心。可是初始化密码的时候又把我给干蒙了,直接报了 Http 500 错误。 看报错是找不到 jupyter_notebook_config.json 文件,这个文件是 jupyter 的配置文件。找不到这个文件说明配置初始化失败了,咱们能够手动初始化,或者...多重启几遍服务(这个是真的有用

手动初始化 juptyer 配置

  1. 首先经过 exec 命令进入容器
  2. 执行命令 jupyter lab --generate-config
  3. 将配置路径下的文件权限都改成 777。执行 chmod 777 .jupyter/*
  4. 退出容器

**注:**这个方法咱们迁移服务器的时候不须要再作一遍了,由于咱们的数据会备份,配置文件也在咱们备份的范围内。

启动后设置密码不生效

折腾好配置,终于能够初始化密码了。结果从新登陆的时候直接提示我密码错误 Invalid credentials。 我他妈的真的,要疯了。 终于,我找到了解决方案。重启两遍服务就行了。GitHub issue

垃圾!

结束了吗?没有。新建文件提示 404

到这里我已经心如止水了,报错就报错吧。淦!

-w384

还好这个问题比较容易搞定。看了下 log

[W 13:31:34.069 LabApp] Blocking Cross Origin API request for /api/contents/.  Origin: https://jupyter.fxcdev.com, Host: toner-jupyter:8888
[W 13:31:34.069 LabApp] Not Found
[W 13:31:34.070 LabApp] 404 POST /api/contents/?1573306294042 (172.28.0.3) 1.76ms referer=https://jupyter.fxcdev.com/lab?
复制代码

是跨域致使的。为何会跨域呢? 由于走了 nginx 转发,因此域名改变了。配置一下 nginx 就能够了。 在 location 对象里加上 proxy_set_header Host $host; 完美解决问题。

结语

文章比较乱,先综述一下问题解决方式吧:

  1. Docker 挂载匿名券后没法启动,提示权限被拒 ———— 修改挂载路径权限为 777
  2. 启动后设置密码报 500 错误 ———— 手动初始化 jupyter 配置,或者多重启几遍
  3. 启动后设置密码不生效 ———— 多重启几遍 jupyter
  4. 新建文件报 404 错误 ———— 配置 nginx 转发的时候顺便带上域名

最后,终于能舒服的用上环境了,过阵子数据分析完了若是有所发现,我会放出来给你们看看~敬请期待!

相关文章
相关标签/搜索