python - jupyter notebook 停止 SSL 错误

标签 python docker ssl jupyter-notebook jupyter

我在 ubuntu 16.04 docker 容器中运行 jupyter notebook,作为非 root 用户,通过 .pem 配置 SSL文件。我的问题是,我无法执行 jupyter notebook stop $port命令停止正在运行的服务器。

我通过执行 sudo HOME=/home/seiji -u seiji jupyter notebook 启动笔记本更改HOME环境变量(被 chown'd 为 seiji)。

我可以执行通常的 jupyter notebook list以用户身份运行命令 (seiji) 并输入 JUPYTER_RUNTIME_DIR jupyter 查找 json 的环境变量包含服务器信息的文件。例如:sudo JUPYTER_RUNTIME_DIR=/jupyter/runtime -u seiji jupyter notebook list正确返回:https://localhost:8888/ :: /jupyter/notebooks (我以通常的方式在配置文件中指定运行时目录)。

我的问题是,我不知道如何执行 jupyter notebook stop 8888以类似的方式。如果我按原样运行它,它会以 root 身份运行并告诉我 There are no running servers .如果我以 user:seiji 运行它,我遇到了 SSL 问题。如:

> sudo JUPYTER_RUNTIME_DIR=/jupyter/runtime -u seiji jupyter notebook stop 8888 

返回错误。它开始于:Shutting down server on port 8888 ...但随后打印以下内容:

SSL 错误 10 ('::1', 8888, 0, 0): [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:645)

我的猜测是它尝试使用“http”地址而不是“https”来访问服务器,但我不知道如何更改它。

我也试过传递环境变量 JUPYTER_CONFIG_DIR其中包含列出 .pem 位置的配置文件文件的行 c.NotebookApp.certfile = u'/jupyter/certs/mycert.pem' .我还尝试在使用 --certfile=[location] 从 cmdline 运行时显式输入证书的位置但似乎这被忽略了。有没有人有任何想法?

最佳答案

如果 Jupyter 使用的任何 SSL 库都无法验证您的证书,则可能会发生这种情况(我认为随着时间的推移,细节发生了一些变化)。如果证书是自签名的,这很常见 - 默认证书存储可能无法验证您的颁发者。我目前用我的 Jupyter 设置脚本做这样的事情:cat mycert.crt | openssl x509 -inform DER >> "$(python -c 'import certifi; print(certifi.where())')"我相信如果您已经拥有 PEM 形式的证书,那么您只需要:cat mycert.pem >> "$(python -c 'import certifi; print(certifi.where())')"然后像这样开始:SSL_CERT_FILE=$(python -c 'import certifi; print(certifi.where())') jupyter notebook &并以类似方式停止:SSL_CERT_FILE=$(python -c 'import certifi; print(certifi.where())') jupyter notebook stop我使用 certifi 的原因位置和环境变量是 certifi似乎是最受欢迎的软件包,并且环境设置似乎受到其他库的尊重(包括 requests 和内置 SSL 模块)。
使用此更新文件启动服务器的原因是,笔记本电脑可以自己连接到服务器(例如,用于自省(introspection))。

关于python - jupyter notebook 停止 SSL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49291335/

相关文章:

python - 你如何检查列表的项目是否等于同一列表中的另一个项目

php - 检测浏览器的 SNI 支持

node.js - 在 NodeJS/Bluemix 中强制使用 SSL

linux - 安装 Docker 时出错 - curl : (23) Failed writing body (0 ! = 13847)

Ubuntu 上的 Docker TLS 错误

即使使用 FTP_TLS,Python ftplib 也会失败并显示 "Policy requires SSL"

python - Mechanize/CookieJar 不保持 session 持久性

python - 仅当两个值匹配且属于同一 ID 时才合并两个数据帧

Python,在shell中隐藏密码

docker - Docker如何用于多层应用?