访问在Docker容器上运行的Jupyter Notebook


72

我用python库和Jupyter创建了一个docker镜像。我使用选项启动容器-p 8888:8888,以链接主机和容器之间的端口。当我在容器内启动Jupyter内核时,它正在运行localhost:8888(并且没有找到浏览器)。我用的命令jupyter notebook

但是从主机上,与主机的浏览器中的Jupyter一起使用的IP地址是什么?

随着命令ifconfig,我发现eth0dockerwlan0lo...

谢谢 !


要启动docker容器,我使用nvidia-docker
J.Guillaumin

您是否检查了是否在localhost:8888上侦听?例如使用netcat?
sge

我在浏览器localhost:8888中尝试过,但未使用netcat
J.Guillaumin

1
那么您需要调试情况。首先,查看您的容器是否正在实际运行(不带-d启动,附加或直接运行docker ps)。其次,您需要检查您的端口是否确实通过了主机。
sge

2
您好,对不起,我请了5天假。此解决方案有效:进入容器:jupyter notebook --ip 0.0.0.0 --no-browser进入浏览器(OST):localhost:8888/tree
J.Guillaumin

Answers:


64

您需要在运行您的笔记本电脑0.0.0.0jupyter notebook -i 0.0.0.0。在本地主机上运行,​​使其只能从容器内部使用。


57
Docker:docker run -it -p 8888:8888 image:version 容器: jupyter notebook --ip 0.0.0.0 --no-browser 主机:localhost:8888/tree‌​
J.Guillaumin

@ j-guillaumin非常感谢!它只是通过使用命令jupyter notebook --ip 0.0.0.0 --no-browser而不是jupyter notebook起作用。
nkhuyu

14
现在您必须添加此标志:--allow-root!它来自Jupyter的安全问题。或者,您可以自定义配置文件以允许根(* .py输入~/.jupyter.
J.Guillaumin

1
如果发布的端口不同于jupyter的默认8888,请使用--port XXXXwith jupyterdocker run您可能还需要--allow-root在jupyter调用中包含该端口。
kilgoretrout

35

主机: docker run -it -p 8888:8888 image:version

容器内: jupyter notebook --ip 0.0.0.0 --no-browser --allow-root

主机访问此URL: localhost:8888/tree‌​

首次登录时,终端上会显示一个链接,用于使用令牌登录。


4
如果主机的端口8888被占用,我们可以使用其他端口,例如8899。主机:docker run -it -p 8899:8888 image:version 主机访问此URL:localhost:8899/tree‌​
user978112

19

docker run命令是必需的,用于打开容器的端口以允许从主机浏览器进行连接,并使用-p将端口分配给Docker容器,然后从中选择jupyter映像docker images

docker run -it -p 8888:8888 image:version

在容器内,启动笔记本并分配您打开的端口:

jupyter notebook --ip 0.0.0.0 --port 8888 --no-browser --allow-root

通过http:// localhost:8888上的桌面浏览器访问笔记本 ,笔记本将提示您输入创建笔记本时生成的令牌。


它是使用bind mount还是volumn?还是没有与主机共享存储空间
卢克·阿隆

@LukAron除非为docker -vrun命令指定了该选项,否则不会与主机共享任何存储。要映射要共享的卷,-v /path/to/host/source:/container/path/to/src可以使用类似的东西。但请注意,这将隐藏容器可能具有的所有内容/container/path/to/src
hlongmore '20

糟糕的是,拒绝投票的人没有给出原因。这几乎是我现在成功使用的命令。唯一的区别是,我指定了jupyter的完整路径,并且使我可以使用环境变量选择其他端口。
hlongmore '20

10

要获取到Jupyter笔记本服务器的链接:

您之后docker run的命令,超链接应自动生成。看起来像这样:http://localhost:8888/?token=f3a8354eb82c92f5a12399fe1835bf8f31275f917928c8d2 :: /home/jovyan/work

如果您想稍后再次获得链接,可以输入docker exec -it <docker_container_name> jupyter notebook list


jupyter notebook list由于问题而无法运行:(
CiprianTomoiagă18年

哦! 对于IP,可以使用命令hostname -I获取远程服务器的IP(如果使用的是远程主机)。然后用IP替换URL中的“ localhost”。
何浩

如果您指定-it了初始docker run命令,并且正在PyCharm Professional中运行,则只需单击Attached Console窗口中的链接即可。如果仅从外壳程序运行它,则外壳程序可能允许也可能不允许您单击链接。
hlongmore

4

下面是我如何使用docker工具箱在Windows 7上运行它。

如果使用的是docker工具箱,请打开Docker快速入门终端,并在此处记录IP:

docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

tensorflow安装网站运行docker命令后:

docker pull tensorflow/tensorflow                  # Download latest image
docker run -it -p 8888:8888 tensorflow/tensorflow  # Start a Jupyter notebook server

您将收到以下消息:

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

在主机中,将127.0.0.1替换为192.168.99.100,然后使用该URL的其余部分


如果我希望Jupyter在5000端口上运行,是否可以工作?
jeffry copps

@jeffrycopps是的,您只需要-p <host port>:<container port>正确指定端口即可。例如,如果要在上的容器上运行它5000,但要在上运行它8888,请使用-p 8888:5000,并确保执行该操作--expose 5000。另外,根据您的特定配置,您可能需要指定-p 127.0.0.1:8888:5000从主机访问它。(我意识到自您提出要求以来已经过了一年,但我想我会帮助任何可能遇到相同问题的人。)
hlongmore


0

在容器中,您可以运行以下命令以使其在本地计算机上可用(使用docker计算机的IP地址)。

jupyter笔记本--ip 0.0.0.0 --allow-root

根据容器的设置,您可能不需要提供--allow-root标志。


0

查看Manifold最近开源的Torus项目。我们希望ML工程师能够采用一种简单的方法,在整个团队中使用一致的开发环境,开始在新项目上运行。该Python cookiecutter将为您搭建一个新的项目结构,其中包括一个使用我们在Docker Hub中放入的预烘焙ML dev映像的Dockerfile和一个为您处理所有端口转发的Docker Compose配置。编写配置是为了选择主机上的开放端口,以转发到容器内运行在8888上的笔记本服务器。不再麻烦在您的计算机上运行多个笔记本服务器!希望能检查出来对您有帮助!

Github仓库:https : //github.com/manifoldai/docker-cookiecutter-data-science

我们为什么建造它(带有演示):https : //medium.com/manifold-ai/torus-a-toolkit-for-docker-first-data-science-bddcb4c97b52


2
请添加更明确的免责声明。当链接到您自己的产品或项目时,您必须在帖子中公开您的从属关系。否则,您的帖子可能会被视为“垃圾邮件”或垃圾邮件。参见stackoverflow.com/help/promotion
elixenide

0

作为构建自己的Docker映像的替代方法,您还可以使用ML Workspace映像。ML Workspace是一个开源Web IDE,它将Jupyter,VS Code,桌面GUI和许多其他工具与库组合到一个方便的Docker映像中。部署单个工作区实例非常简单:

docker run -p 8080:8080 mltooling/ml-workspace:latest

所有工具均可从同一端口访问,并集成到Jupyter UI中。您可以在此处找到更多文档。


0

docker run -i -t -p 8888:8888continentumio / anaconda3 / bin / bash -c“ / opt / conda / bin / conda install jupyter -y --quiet && mkdir / opt / notebooks && / opt / conda / bin / jupyter notebook --notebook-dir = / opt / notebooks --ip ='*'--port = 8888 --no-browser --allow-root“

我必须在命令中添加--allow-root,现在它正在运行

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.