在Docker上认证Jupyter笔记本

10

我正在尝试在我的Mac笔记本电脑上安装Jupyter Notebook Docker容器。使用以下选项:

docker run -dit --rm -p 8888:8888 gcr.io/tensorflow/tensorflow

容器启动后,我可以像预期的那样通过http://[cointainer-IP]:8888访问它。

但是它带我到一个身份验证屏幕,并要求输入令牌。我该如何获取该令牌?在 Docker 容器中应查找哪个日志?

5个回答

11

容器的stdout将提供给您一个特殊的URL,其中包含一个令牌以便您登录。您可以在前台运行(不带-d)或者使用docker logs <container_id>检查当前容器的日志。在那里,您应该会看到以下类似的输出:

[I 16:57:05.859 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[W 16:57:05.871 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I 16:57:05.877 NotebookApp] Serving notebooks from local directory: /notebooks
[I 16:57:05.877 NotebookApp] 0 active kernels 
[I 16:57:05.877 NotebookApp] The Jupyter Notebook is running at: http://[all ip addresses on your system]:8888/?token=42685cc246e6571c0f16417327fbf4c398061125c00edea5
[I 16:57:05.877 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 16:57:05.878 NotebookApp] 

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=42685cc246e6571c0f16417327fbf4c398061125c00edea5

8
这个输出附带的令牌对我不起作用。我一直收到“无效令牌”的提示。你有什么想法为什么会这样,怎么修复呢? - jblakeley
6
这对我没用。我一直收到“无效令牌”错误,就像@jblakeley一样。但是在使用lsof -ti:8888 | xargs kill -9 杀死占用8888端口的进程后,我不再收到烦人的令牌消息了。 - Georgy
4
确保您不要在本机上运行Jupyter。这会干扰令牌输入,因为两者都在8888端口上。停用我主机上的本地版Jupyter并输入令牌,解决了我的问题。 - user3780173
1
@user3780173 这很关键!我也遇到了同样的问题。希望这个问题在文档中能够非常清晰地列出来! - jeffhale
@user3780173 我真希望我能给你点赞十次。我正在使用PyCharm,它有自己的Jupyter服务器运行...非常感谢! - undefined

6
您可以通过--NotebookApp.token=''参数禁用令牌或添加自定义令牌到start-notebook.sh脚本中。从终端复制令牌通常会导致错误并且不太方便。

禁用令牌

很容易,只需执行以下操作:
docker run -d -p 8888:8888 jupyter/pyspark-notebook start-notebook.sh --NotebookApp.token=''

定制化令牌

然而,这并不推荐使用,并且您可以选择定义一个简单的密码:

docker run -d -p 8888:8888 jupyter/pyspark-notebook start-notebook.sh --NotebookApp.token='MY_EASY_PASSWORD'

我已经成功使用上述方法在 docker run 中禁用了密码。 - Bruce wayne - The Geek Killer
但我有一个疑问,如何在docker-compose文件中实现相同的功能? - Bruce wayne - The Geek Killer

2

我为自己编写了以下代码,以便自动打开浏览器并输入身份验证:

最初的回答:

docker exec -it <docker container name> bash -c 'jupyter notebook list' | grep http | cut -f1 -d ' ' | xargs xdg-open

适用于Ubuntu 18.04操作系统


你的命令对我返回了一个错误。对我来说,简单地执行 docker exec -it <docker-container-name> bash -c 'jupyter notebook list' 就是解决方案。不过还是感谢你的回复! - Gabriel Ziegler
嗨@GabrielZiegler,您能具体说明您收到了什么错误吗?如果可能的话,您使用的是哪个版本的jupyter笔记本docker以及您的操作系统版本? - Laurens
抱歉,我的xdg-open默认设置有误,这就是为什么我在执行URL时遇到了xdg-open错误的原因。错误信息:which: no firefox-bin in (/opt/firefox-nightly) Opening in existing browser session. - Gabriel Ziegler

0

0

以防其他人遇到和我一样的情况:我解决这个问题的唯一方法(感谢@user3780173在被接受的答案中的评论)是关闭我在主机上运行的另一个jupyter实例。只有这样,我才能在docker中打开笔记本。在此之前,我输入了由docker生成的令牌,但始终收到“凭据无效”的消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接