我在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 .
9 回答
对于Linux主机,Robert Graves的回答是可行的,但对于Mac OS X或Windows,还有更多工作要做,因为docker在虚拟机中运行 .
因此,要开始启动docker shell(或任何shell,如果您使用的是Linux)并运行以下命令来启动新的TensorFlow容器:
然后,对于Mac OS X和Windows,您只需执行以下一次:
打开VirtualBox
点击docker vm(我的自动命名为"default")
单击设置打开设置
在网络设置中打开端口转发对话框
单击符号以添加另一个端口,并通过填写如下所示的对话框将mac中的端口连接到VM . 在这个例子中,我选择了端口8810,因为我使用端口8888运行其他笔记本.
然后打开浏览器并连接到http://localhost:8810(或您在主机端口部分设置的任何端口
让您的花式裤机学习应用程序!
我简单而有效的工作流程:
TL; DR版本:
打开 Docker Quickstart Terminal . 如果已经打开,请运行
$ cd
运行 once :
$ docker run -it -p 8888:8888 -p 6006:6006 -v /$(pwd)/tensorflow:/notebooks --name tf b.gcr.io/tensorflow/tensorflow
每次都要开始:
$ docker start -i tf
您将在主目录中获得一个名为
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
代表互动在 Cloud 上运行TensorFlow
在进一步阅读docker documentation后,我有一个适合我的解决方案:
-p 8888:8888和-p 6006:6006将容器端口暴露给同一端口号上的主机 . 如果您只使用-p 8888,将分配主机上的随机端口 .
./run_jupyter.sh告诉docker在容器中执行什么 .
使用此命令,我可以使用主机上的浏览器连接到http://localhost:8888/并访问jupyter笔记本 .
更新:在Windows上与docker进行摔跤后,我切换回带有docker的Ubuntu机器 . 在阅读更多docker文档后,我的笔记本在docker会话之间被删除了 . 这是一个更新的命令,它还在容器中安装主机目录并启动指向该安装目录的jupyter . 现在我的笔记本保存在主机上,下次启动tensorflow时可用 .
如果你是一个使用Windows机器的完全docker noob,这些步骤对我有用 .
版本:Windows 8.1,docker 1.10.3,tensorflow r0.7
运行Docker快速入门终端
加载后,记下IP地址 . 如果你找不到它,请使用
docker-machine ip
并做一个说明 . 让我们称之为'ip address' . 看起来像这样: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/希望你能看到你的ipython文件 .
Jupyter现在准备好为TensorFlow运行Docker image:
docker run -d -v $(pwd):/home/jovyan/work -p 8888:8888 jupyter/tensorflow-notebook
为了让它在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连接到它 . 我确定这会占用大量内存 .
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 /
为了整理一下这些东西,我想给出一些额外的解释,因为我也经历了很多设置具有张量流的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系统的文件夹 . 不要忘记在开头给出分区(例如"/c/") . 另外,他声明稍后可以从主机使用params -p获得端口 . 从所有这个命令中你得到这个容器执行的[CONTAINER_ID]!您始终可以通过在docker控制台中运行“docker ps”来查看当前正在运行的容器 . 上面创建的容器应该出现在此列表中,且ID相同 .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/来访问它 .它为您提供终端提示:
要么
您应该使用'vdocker'或将vdocker更改为'default' .
出于某种原因,我遇到了一个额外的问题,除了提供的示例之外我还需要克服这个问题,使用
--ip
标志:然后我可以从我的机器通过http://localhost:8888访问 . 在某些方面,这是有道理的;在容器中,您绑定到
0.0.0.0
,表示所有可用的地址 . 但是我是否需要这样做似乎有所不同(例如,我已经开始使用jupyter/scipy-notebook
笔记本而不必这样做) .在任何情况下,上述命令对我有用,可能对其他人有用 .