[英]jupyter notebook stop SSL error
我在 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)来启动笔记本。
我可以通过以用户身份 ( seiji
) 运行它并输入JUPYTER_RUNTIME_DIR
环境变量来执行通常的jupyter notebook list
命令,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
似乎是最受欢迎的 package,并且环境设置似乎受到其他库(包括requests
和内置 SSL 模块)的尊重。
还使用这个更新的文件启动服务器的原因是笔记本电脑可以自己连接到服务器(例如用于内省)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.