我已经在ubuntu机器上安装了tensorflow docker容器。 tensorflow docker setup instructions指定:
docker run -it b.gcr.io/tensorflow/tensorflow
这使我进入docker容器终端,我可以运行python并执行Hello World示例。我也可以手动运行。\ run_jupyter.sh来启动jupyter笔记本。但是,我无法从主机那里拿到笔记本电脑。
如何启动jupyter笔记本电脑,以便我可以使用主机上的笔记本电脑?理想情况下,我想使用docker启动容器并在一个命令中启动jupyter。
答案 0 :(得分:47)
对于Linux主机,Robert Graves的回答是可行的,但对于Mac OS X或Windows,还有更多工作要做,因为docker在虚拟机中运行。
因此,要开始启动docker shell(或任何shell,如果您使用的是Linux)并运行以下命令来启动新的TensorFlow容器:
docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow ./run_jupyter.sh
然后,对于Mac OS X和Windows,您只需执行以下一次:
答案 1 :(得分:17)
$ cd
$ docker run -it -p 8888:8888 -p 6006:6006 -v /$(pwd)/tensorflow:/notebooks --name tf b.gcr.io/tensorflow/tensorflow
$ docker start -i tf
如果您不在Windows上,则应该将
/$(pwd)
更改为$(pwd)
您将在主目录中获得一个名为tensorflow
的空文件夹,用作项目文件的持久存储,例如Ipython笔记本和数据集。
cd
确保您在主目录中。-it
代表交互式,因此您可以在终端环境中与容器进行交互。 -v host_folder:container_folder
可以在主机和容器之间共享文件夹。主机文件夹应位于主目录中。 /$(pwd)
转换为Windows 10中的//c/Users/YOUR_USER_DIR
。此文件夹在容器中被视为notebooks
目录,由Ipython / Jupyter Notebook使用。 --name tf
将名称tf
分配给容器。-p 8888:8888 -p 6006:6006
将容器的端口映射到主机,第一对为Jupyter笔记本,第二对为Tensorboard -i
代表互动答案 2 :(得分:10)
在进一步阅读docker documentation之后,我有一个适合我的解决方案:
docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow ./run_jupyter.sh
-p 8888:8888和-p 6006:6006将容器端口暴露给同一端口号上的主机。如果您只使用-p 8888,将分配主机上的随机端口。
./run_jupyter.sh告诉docker在容器中执行什么。
使用此命令,我可以使用主机上的浏览器连接到http://localhost:8888/并访问jupyter笔记本。
更新: 在与Windows上的docker摔跤后,我换回了带有docker的Ubuntu机器。在阅读更多docker文档后,我的笔记本在docker会话之间被删除了。这是一个更新的命令,它还在容器中安装主机目录并启动指向该安装目录的jupyter。现在我的笔记本保存在主机上,下次启动tensorflow时可用。
docker run -p 8888:8888 -p 6006:6006 -v /home/rob/notebook:/notebook b.gcr.io/tensorflow/tensorflow sh -c "jupyter notebook /notebook"
答案 3 :(得分:4)
如果你是一个使用Windows机器的整个docker noob,这些步骤对我有用。
版本:Windows 8.1,docker 1.10.3,tensorflow r0.7
docker-machine ip
并进行记录。让我们称之为“IP地址”。看起来像这样:192.168.99.104(我编写了这个ip地址)将此命令粘贴到docker终端上:
docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow
。
如果您是第一次运行它,它将在此轻量级vm上下载并安装图像。然后它应该说'Jupyter笔记本正在运行......' - >这是一个好兆头!
<your ip address (see above)>:8888
打开浏览器。例如。 192.168.99.104:8888 / 答案 4 :(得分:4)
Jupyter现在准备为TensorFlow运行Docker image:
docker run -d -v $(pwd):/home/jovyan/work -p 8888:8888 jupyter/tensorflow-notebook
答案 5 :(得分:2)
让它在hyper-v下运行。执行以下步骤:
1)使用https://blogs.msdn.microsoft.com/scicoria/2014/10/09/getting-docker-running-on-hyper-v-8-1-2012-r2/创建一个docker虚拟机,这将为您提供一个有效的docker容器。您可以通过控制台或通过ssh连接到它。因为我确信这将占用大量内存,所以我至少要存储8GB的内存。
2)运行“ifconfig”以确定Docker VM的IP地址
3)在docker shell提示符下输入:
docker run -p 8888:8888 -p 6006:6006 -it b.gcr.io/tensorflow/tensorflow
4)使用http:/ [ifconfig address]连接到Jupyter Workbench:8888 /
答案 6 :(得分:1)
为了整理一下这些东西,我想给出一些额外的解释,因为我也遭遇了很多设置有tensorflow的docker。为此我参考了this视频,遗憾的是,视频并非在所有情况下都是自我解决的。 我假设你已经安装了docker。视频中非常有趣的一般部分从0:44分钟开始,他终于开始使用码头工具。在那之前,他只将tensorflow repo下载到文件夹中,然后将其安装到容器中。您当然可以将任何其他内容放入容器中,稍后在docker VM中访问它。
首先他运行长码头命令docker run –dit -v /c/Users/Jay/:/media/disk –p 8000 –p 8888 –p 6006 b.gcr.io/tensorflow/tensorflow
。 “run”命令启动容器。在这种情况下,它启动容器“b.gcr.io/tensorflow/tensorflow”,其地址在tensorflow docker installation tutorial内提供。如果尚未在本地使用,则将由docker下载该容器。
然后他给出了另外两种参数:他在给定容器的路径上安装了hosts系统的文件夹。不要忘记在开头给出分区(例如&#34; / c /&#34;)。
此外,他声明稍后可以从主机使用params -p获得端口。
从所有这个命令中你得到这个容器执行的[CONTAINER_ID]!
您始终可以通过在docker控制台中运行“docker ps”来查看当前正在运行的容器。上面创建的容器应该出现在此列表中,且ID相同。
下一步:在您的容器运行时,您现在想要在其中执行某些操作。在我们的例子中jupyter notebook或tensorflow或者其他:为此,你让docker在新创建的容器上执行bash:docker exec –ti [CONTAINER_ID] bash
。此命令现在在容器上启动bash shell。你看到了这个,因为“$”现在改为root @ [CONTAINER_ID]:从这里回来是没办法的。如果你想回到码头终端,你必须像1:10那样开始另一个新的码头控制台。现在,在容器中运行bash shell,您可以执行任何操作,并执行Jupiter或tensorflow等等。您在运行命令中给出的主机系统文件夹现在应该在“/ media / disk”下可用。
访问VM输出的最后一步。它仍然不想为我工作,我无法访问我的笔记本电脑。您仍然需要找到正确的IP和端口才能访问已启动的笔记本,数据板会话或其他任何内容。首先使用docker-machine –ls
找出主要的IP。在此列表中,您将获得URL。 (如果它是您唯一的容器,则称为默认容器。)您可以放弃此处给出的端口。然后从docker ps
获取转发端口列表。当列表中写入0.0.0.32776-> 6006 / tcp时,您可以使用首先给出的端口(Awkyard)从主机上访问它。所以在我的情况下,容器中执行的张量板表示“在端口6006上启动”。然后从我的hostmachine我需要输入http://192.168.99.100:32776/来访问它。
- &GT;就是这样!它像我一样跑向我!
答案 7 :(得分:0)
它为您提供终端提示:
FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd vdocker') DO %i
docker run -it tensorflow/tensorflow:r0.9-devel
或
FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd vdocker') DO %i
docker run -it b.gcr.io/tensorflow/tensorflow:latest-devel
你应该拥有&#39; vdocker&#39;或将vdocker更改为&#39;默认&#39;。
答案 8 :(得分:0)
出于某种原因,除了提供的示例之外,我还遇到了一个需要克服的问题,使用--ip
标志:
nvidia-docker run --rm \
-p 8888:8888 -p 6006:6006 \
-v `pwd`:/root \
-it tensorflow/tensorflow:latest-devel-gpu-py3 sh -c "jupyter notebook --ip 0.0.0.0 ."
然后我可以从我的机器通过http://localhost:8888访问。在某些方面,这是有道理的;在绑定到0.0.0.0
的容器中,代表所有可用的地址。但是,我是否需要这样做似乎有所不同(例如我使用jupyter/scipy-notebook
启动笔记本而不必这样做)。
在任何情况下,上述命令对我有用,可能对其他人有用。
答案 9 :(得分:0)
作为正式TensorFlow映像的替代方案,您还可以使用ML Workspace Docker映像。 ML Workspace是一个开源Web IDE,它将Jupyter,VS Code,TensorFlow和许多其他工具与库组合到一个方便的Docker映像中。部署单个工作区实例非常简单:
docker run -p 8080:8080 mltooling/ml-workspace:latest
所有工具都可以从同一端口访问,并集成到Jupyter UI中。您可以找到文档here。