最近手上收集了一些数据,想要分析一下。而后想起来好久前就打算给本身搭一个 Jupyter Lab 环境,择日不如撞日,干脆就今天搞定。python
Juptyer Notebook 是从 IPython 演变出来的在线交互式计算环境,能够编写文档,这个文档能够包含代码、文本(Markdown)、数学、图标和富媒体。Jupyter Lab 是 Jupyter Notebook 的下一代用户界面。nginx
单纯跑一个 Jupyter 实际上是很简单的:git
pip install jupyterlab
jupyter lab
复制代码
上面的命令就能够跑起来一个 Jupyter 了,只不过须要 Python 环境。github
由于我要跑在服务器上,不但愿服务器的环境太过杂乱,这样迁移起来就会很麻烦,因此最好跑在 Docker 里。docker
不幸的是我在实践 Docker 部署的过程当中踩了不少坑,脑壳都给踩懵了。并且这部分恰恰网上资料比较少,只有官方文档和部分博客有涉及。因此我在此记录下个人踩坑历程,但愿对后人有所帮助。shell
我大体就遇到了上面这些问题,各个都很奇葩。接下来,敬请观赏我心酸的心路历程:json
其实直接跑起来容器,是不会报错的,可是这样咱们的数据也就跟容器共生共死了,这可不能接受。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
终于启动成功了,很开心。可是初始化密码的时候又把我给干蒙了,直接报了 Http 500 错误。 看报错是找不到 jupyter_notebook_config.json
文件,这个文件是 jupyter 的配置文件。找不到这个文件说明配置初始化失败了,咱们能够手动初始化,或者...多重启几遍服务(这个是真的有用)
exec
命令进入容器jupyter lab --generate-config
777
。执行 chmod 777 .jupyter/*
**注:**这个方法咱们迁移服务器的时候不须要再作一遍了,由于咱们的数据会备份,配置文件也在咱们备份的范围内。
折腾好配置,终于能够初始化密码了。结果从新登陆的时候直接提示我密码错误 Invalid credentials
。 我他妈的真的,要疯了。 终于,我找到了解决方案。重启两遍服务就行了。GitHub issue
垃圾!
到这里我已经心如止水了,报错就报错吧。淦!
还好这个问题比较容易搞定。看了下 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;
完美解决问题。
文章比较乱,先综述一下问题解决方式吧:
777
最后,终于能舒服的用上环境了,过阵子数据分析完了若是有所发现,我会放出来给你们看看~敬请期待!