Jupyter密码和Docker

时间:2018-02-19 22:58:54

标签: docker jupyter-notebook

要更改/设置Jupyter服务器的密码,请按照此处的说明进行操作:

http://jupyter-notebook.readthedocs.io/en/latest/public_server.html#preparing-a-hashed-password

我在我的本地ipython环境中这样做。有一点需要注意的是,每当我为同一个密码重新运行passwd()命令时,我会得到不同的哈希值,但我认为这是预期的行为。

反正。我得到哈希,然后我在Dockerfile中有这样一行:

ENV PW_HASH="u'sha1:salt:hash'"

在我有jupyter笔记本的启动脚本中

echo "c.NotebookApp.password = ${PW_HASH}" >> ${CONFIG_PATH}

然后 jupyter notebook --allow-root -y --no-browser --ip=0.0.0.0 --config=${CONFIG_PATH}

但是,如果我然后通过

运行docker容器

docker run -it -p 8888:8888 <container-name>

虽然它启动jupyter并允许我通过localhost:8888在我的浏览器中连接,但它不会接受我刚刚通过其哈希设置的密码。

奇怪的是,当我添加SSL证书的附加步骤(并转到https://localhost:8888)时,它确实有效。这是怎么回事?

PS:我知道拥有密码但没有SSL是粗略的。我只是一步一步地测试它,并想知道为什么没有SSL部分它将无法工作。

2 个答案:

答案 0 :(得分:4)

找到了两种可能的解决方案,我对两者都进行了测试。

jupyter核心:4.6.3
jupyter笔记本:6.0.3

设置密码

“添加选项-e PASSWORD=password来设置环境变量。然后,所设置的密码就是jupyter登录的密码。” [1]当docker run

environment:
    - PASSWORD=password

使用Docker Compose时。然后只需输入密码

设置令牌

“……在启动Jupyter笔记本Docker容器之一-e JUPYTER_TOKEN="easy; it's already there"时,已经存在一种简单的设置令牌的方法。实际上,如果您在本地环境中export JUPYTER_TOKEN='easy',事情会变得更加容易,然后使用docker run --rm -d --name democontainer -p 9999:8888 -e JUPYTER_TOKEN jupyter/base-notebook(相当于-e JUPYTER_TOKEN=$JUPYTER_TOKEN)启动容器。然后您可以打开http://localhost:9999?token=${JUPYTER_TOKEN}将其自动启动到笔记本中。为此,H / t @minrk ...“ [2 ]

使用Docker Compose时

environment:
    - JUPYTER_TOKEN=easy

然后只运行http://localhost:9999?token=easy或自动化更多...

[1] login password required to access jupyter notebook running in nvidia-docker container

[2] https://blog.ouseful.info/2019/02/05/on-not-faffing-around-with-jupyter-docker-container-auth-tokens/

答案 1 :(得分:2)

使用ipython终端创建哈希密码

from notebook.auth import passwd
passwd()

它会促使你输入passwd两次,并创建哈希密码, 并在Docker文件中添加以下行

RUN jupyter notebook --generate-config
RUN echo "c.NotebookApp.password='sha1:***'">>/root/.jupyter/jupyter_notebook_config.py

由于我是唯一一个使用笔记本电脑的人,所以我只是坚持使用笔记本电脑。