53

I've installed the tensorflow docker container on an ubuntu machine. The tensorflow docker setup instructions specify:

docker run -it b.gcr.io/tensorflow/tensorflow

This puts me into the docker container terminal, and I can run python and execute the Hello World example. I can also manually run .\run_jupyter.sh to start the jupyter notebook. However, I can't reach the notebook from host.

How do I start the jupyter notebook such that I can use the notebook from the host machine? Ideally I would like to use docker to launch the container and start jupyter in a single command.

4

10 回答 10

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. 打开虚拟盒子
  2. 单击docker vm(我的自动命名为“默认”)
  3. 点击设置打开设置
  4. 在网络设置中打开端口转发对话框
  5. 单击 + 符号添加另一个端口,并通过填写对话框将端口从您的 mac 连接到 VM,如下所示。在此示例中,我选择了端口 8810,因为我使用端口 8888 运行其他笔记本。 在此处输入图像描述
  6. 然后打开浏览器并连接到http://localhost:8810(或您在主机端口部分设置的任何端口
  7. 制作你喜欢的裤子机器学习应用程序!
于 2015-11-11T01:43:09.693 回答
20

我简单而高效的工作流程:

TL;DR 版本:

  1. 打开Docker 快速入门终端。如果它已经打开,请运行$ cd
  2. 运行一次$ docker run -it -p 8888:8888 -p 6006:6006 -v /$(pwd)/tensorflow:/notebooks --name tf b.gcr.io/tensorflow/tensorflow
  3. 每次开始:$ docker start -i tf

如果您不在 Windows 上,您可能应该更改/$(pwd)$(pwd)

您将获得一个在您的主目录中命名的空文件夹tensorflow,用作项目文件(如 Ipython Notebooks 和数据集)的持久存储。

解释:

  1. cd以确保您位于主目录中。
  2. 参数:
    • -it代表interactive,所以可以在终端环境下与容器进行交互。
    • -v host_folder:container_folder启用在主机和容器之间共享文件夹。主机文件夹应该在您的主目录中。/$(pwd)在 Windows 10 中转换为//c/Users/YOUR_USER_DIR。此文件夹被视为notebooksIpython/Jupyter Notebook 使用的容器中的目录。
    • --name tf将名称分配给tf容器。
    • -p 8888:8888 -p 6006:6006将容器的端口映射到主机,第一对用于 Jupyter 笔记本,第二对用于 Tensorboard
  3. -i代表互动

在云端运行 TensorFlow

于 2016-04-22T14:52:27.083 回答
12

在进一步阅读docker 文档后,我有一个适合我的解决方案:

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 notebook。

更新:在 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"
于 2015-11-10T19:32:16.077 回答
4

如果您是使用 Windows 机器的 docker noob,这些步骤对我有用。

版本:Windows 8.1、docker 1.10.3、tensorflow r0.7

  1. 运行 Docker 快速入门终端
  2. 加载后,记下ip地址。如果找不到它,请使用它docker-machine ip并记下。让我们称之为“IP地址”。看起来像这样:192.168.99.104(这个IP地址是我编的)
  3. 将此命令粘贴到 docker 终端上:

    docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow.

    如果你是第一次运行它,它会在这个轻量级虚拟机上下载并安装镜像。然后它应该说“Jupyter notebook 正在运行……” -> 这是一个好兆头!

  4. 在以下位置打开浏览器:<your ip address (see above)>:8888。例如。192.168.99.104:8888/
  5. 希望你能看到你的 ipython 文件。
于 2016-04-08T17:02:32.023 回答
4

Jupyter 现在已经为 TensorFlow准备好运行Docker 映像了:

docker run -d -v $(pwd):/home/jovyan/work -p 8888:8888 jupyter/tensorflow-notebook

于 2016-09-19T16:00:10.447 回答
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]:8888/ 连接到 Jupyter Workbench

于 2016-04-07T14:41:23.773 回答
1

为了稍微整理一下,我想给出一些额外的解释,因为我在使用 tensorflow 设置 docker 时也遭受了很多痛苦。为此,我参考了这个视频,不幸的是,它在所有情况下都不是一目了然的。我假设你已经安装了 docker。视频中真正有趣的一般部分从 0:44 开始,他终于开始了 docker。在此之前,他只将 tensorflow repo 下载到文件夹中,然后将其挂载到容器中。您当然可以将任何其他内容放入容器中,稍后在 docker VM 中访问它。


  1. 首先,他运行长 docker 命令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 安装教程中提供. 如果容器在本地不可用,则 docker 将下载该容器。然后他给出了两种额外的参数:他在容器的给定路径上挂载了一个主机系统的文件夹。不要忘记在开头给出分区(例如“/c/”)。此外,他使用参数 -p 声明稍后可从主机使用端口。从所有这些命令中,您可以返回此容器执行的 [CONTAINER_ID]!通过在 docker 控制台中运行“docker ps”,您始终可以看到当前正在运行的容器。您在上面创建的容器应该以相同的 id 出现在此列表中。


  2. 下一步:随着您的容器运行,您现在想要在其中执行某些操作。在我们的例子中,jupyter notebook 或 tensorflow 或其他:为此,您让 docker 在新创建的容器上执行 bash docker exec –ti [CONTAINER_ID] bash:。此命令现在在您的容器上启动一个 bash shell。您会看到这一点,因为“$”现在更改为 root@[CONTAINER_ID]:。从这里没有退路。如果你想回到 docker 终端,你必须启动另一个新的 docker 控制台,就像他在 1:10 分钟所做的那样。现在有了在容器中运行的 bash shell,您可以做任何您想做的事情并执行 Jupiter 或 tensorflow 或其他任何东西。您在运行命令中提供的主机系统文件夹现在应该在“/media/disk”下可用。


  3. 最后一步访问 VM 输出。它仍然不想为我工作,我无法访问我的笔记本。您仍然需要找到正确的 IP 和端口才能访问已启动的笔记本、张量板会话或其他任何内容。首先通过使用找出主IP docker-machine –ls。在此列表中,您将获得 URL。(如果它是您唯一的容器,则称为默认容器。)您可以忽略此处给出的端口。然后从docker ps你那里得到转发端口的列表。当列表中写入 0.0.0.32776->6006/tcp 时,您可以使用首先给出的端口(Awkyard)从主机访问它。所以在我的例子中,容器中执行的张量板说“在端口 6006 上启动”。然后从我的主机我需要输入http://192.168.99.100:32776/来访问它。

-> 就是这样!它像这样为我奔跑!

于 2016-06-14T09:16:52.093 回答
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 中。您可以在此处找到文档。

于 2019-09-13T21:14:04.900 回答
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

您应该有“vdocker”或将 vdocker 更改为“默认”。

于 2016-06-23T04:19:37.533 回答
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而不必这样做)。

无论如何,上面的命令对我有用,可能对其他人有用。

于 2017-04-05T13:52:45.293 回答