访问在 Docker 容器上运行的 Jupyter notebook
Posted
技术标签:
【中文标题】访问在 Docker 容器上运行的 Jupyter notebook【英文标题】:Access Jupyter notebook running on Docker container 【发布时间】:2016-12-14 07:28:39 【问题描述】:我使用 python 库和 Jupyter 创建了一个 docker 映像。
我使用选项-p 8888:8888
启动容器,以链接主机和容器之间的端口。
当我在容器内启动 Jupyter 内核时,它在 localhost:8888
上运行(并且没有找到浏览器)。我使用了命令jupyter notebook
但是对于我的主机,我必须使用什么 IP 地址才能在主机浏览器中使用 Jupyter?
使用命令ifconfig
,我找到eth0
、docker
、wlan0
、lo
...
谢谢!
【问题讨论】:
启动docker容器我使用nvidia-docker
。
你检查过,如果有东西在 localhost:8888 上监听吗?例如使用 netcat?
我在浏览器中尝试了 localhost:8888,但没有使用 netcat
那么您需要调试情况。首先,查看您的容器是否实际运行(不带 -d 启动、附加或直接运行 docker ps
)。其次,您需要检查您的端口是否实际传递到您的主机。
您好,很抱歉,我请假了 5 天。此解决方案有效:进入容器:jupyter notebook --ip 0.0.0.0 --no-browser
进入浏览器(ost):localhost:8888/tree
【参考方案1】:
您需要在0.0.0.0
:jupyter notebook -i 0.0.0.0
上运行您的笔记本。在 localhost 上运行使其只能在容器内部使用。
【讨论】:
Docker:docker run -it -p 8888:8888 image:version
容器:jupyter notebook --ip 0.0.0.0 --no-browser
主机:localhost:8888/tree
@j-guillaumin 非常感谢!它只是通过使用命令 jupyter notebook --ip 0.0.0.0 --no-browser 而不是 jupyter notebook 来工作。
现在你必须添加这个标志:--allow-root
!它来自 Jupyter 的一个安全问题。或者您可以自定义配置文件以允许root(~/.jupyter.
中的*.py)
将--port XXXX
与jupyter
一起使用,以防您使用docker run
发布与jupyter 默认8888 不同的端口。您还可能需要在jupyter 调用中包含--allow-root
。
如果你的jupter镜像没有带参数启动的选项,只需要使用主机联网进行开发; docker run --gpus all -it --network host tensorflow/tensorflow:latest-gpu-jupyter
【参考方案2】:
主机:docker run -it -p 8888:8888 image:version
容器内部:jupyter notebook --ip 0.0.0.0 --no-browser --allow-root
主机访问此网址:localhost:8888/tree
当您第一次登录时,终端上会显示一个使用令牌登录的链接。
【讨论】:
如果主机的8888端口被占用,我们可以使用其他端口,例如8899。主机:docker run -it -p 8899:8888 image:version
主机访问这个url:localhost:8899/tree
Jupyter 实验室也是这样工作的:jupyter lab --ip 0.0.0.0 --no-browser --allow-root【参考方案3】:
docker run
命令是强制打开容器端口以允许来自主机浏览器的连接,使用 -p 将端口分配给 docker 容器,从 docker images
中选择您的 jupyter 映像。
docker run -it -p 8888:8888 image:version
在容器内启动分配您打开的端口的笔记本:
jupyter notebook --ip 0.0.0.0 --port 8888 --no-browser --allow-root
通过http://localhost:8888 上的桌面浏览器访问笔记本 笔记本会提示您输入创建笔记本时生成的令牌。
【讨论】:
是使用绑定挂载还是卷?或者没有与主机共享存储 @LukAron 除非为 docker run 命令指定了-v
选项,否则不会与主机共享存储。要映射卷以进行共享,可以使用 -v /path/to/host/source:/container/path/to/src
之类的东西。但要小心,这将隐藏容器在/container/path/to/src
处可能拥有的任何内容。
很遗憾,downvoter 没有给出原因;这几乎是我现在成功使用的命令。唯一的区别是我指定了 jupyter 的完整路径,并且可以使用环境变量选择不同的端口。
嗯不适合我。希望我知道要检查什么。【参考方案4】:
获取 Jupyter 笔记本服务器的链接:
在您的docker run
命令之后,应该会自动生成一个超链接。它看起来像这样:http://localhost:8888/?token=f3a8354eb82c92f5a12399fe1835bf8f31275f917928c8d2 :: /home/jovyan/work
如果您想稍后再次获取该链接,可以输入docker exec -it <docker_container_name> jupyter notebook list
。
【讨论】:
jupyter notebook list
由于this 问题而无法工作:(
哦!对于 IP,您可以使用命令 hostname -I
获取远程服务器的 IP(如果您使用的是远程主机)。然后将 URL 中的“localhost”替换为 IP。
如果您在初始的docker run
命令中指定-it
,并且您是从PyCharm Professional 中运行的,您只需单击Attached Console
窗口中的链接。如果你只是从 shell 运行它,你的 shell 可能会也可能不会让你点击链接。【参考方案5】:
以下是我如何使用 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 installation website 运行 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 上运行,它会起作用吗? @jeffrycopps 是的,您只需要正确指定端口-p <host port>:<container port>
。例如,如果您想在5000
的容器上运行它,但在8888
托管,请使用-p 8888:5000
,并确保--expose 5000
。此外,根据您的具体配置,您可能需要指定-p 127.0.0.1:8888:5000
才能从主机访问它。 (我知道你问这个问题已经一年多了,但我想我会帮助任何可能有同样问题的人。)【参考方案6】:
您可以使用命令jupyter notebook --allow-root --ip[of your container]
或使用选项--ip0.0.0.0
授予对所有IP 的访问权限。
【讨论】:
【参考方案7】:除了构建自己的 Docker 映像之外,您还可以使用 ML Workspace 映像。 ML Workspace 是一个开源 Web IDE,它将 Jupyter、VS Code、桌面 GUI 和许多其他工具和库组合到一个方便的 Docker 映像中。部署单个工作区实例非常简单:
docker run -p 8080:8080 mltooling/ml-workspace:latest
所有工具都可以从同一个端口访问并集成到 Jupyter UI 中。您可以找到更多文档here。
【讨论】:
【参考方案8】:在容器中,您可以运行以下命令以使其在本地机器上可用(使用您的 docker 机器的 IP 地址)。
jupyter notebook --ip 0.0.0.0 --allow-root
根据容器的设置,您可能不需要提供 --allow-root 标志。
【讨论】:
【参考方案9】:docker run -i -t -p 8888:8888 continuumio/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 添加到命令中,现在它正在运行
【讨论】:
以上是关于访问在 Docker 容器上运行的 Jupyter notebook的主要内容,如果未能解决你的问题,请参考以下文章
如何在从 docker 容器运行的 jupyter 笔记本中获取黑色代码格式?
在 Docker 容器中将 Spyder 连接到远程 Jupyter Notebook
如何使用官方Tensorflow docker容器在主机目录中保存和编辑Jupyter笔记本?