访问通过Docker运行TensorFlow时的Jupyter笔记本遇到困难

我的问题:

我是机器学习领域的新手。目前我正在尝试通过Docker设置TensorFlow,但在TensorFlow似乎运行后,无法访问Jupyter笔记本。供参考,我使用的是Windows 10、PowerShell、Python 2.7和Oracle VirtualBox(版本5.0.16)。

我非常有信心Docker运行正常,因为我按照他们的设置教程(“从PowerShell使用Docker”)顺利完成了,没有遇到任何问题——我能够很好地运行那里的Hello World示例。我还成功地使用命令运行了一个Ubuntu终端

docker run -it ubuntu bash

然后我按照TensorFlow Docker安装说明进行操作,一切看起来都很正常——我输入了TensorFlow的Docker运行命令:

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

并得到了以下输出:

[I 19:33:16.330 NotebookApp] 将笔记本服务器cookie秘钥写入到/root/.local/share/jupyter/runtime/notebook_cookie_secret[W 19:33:16.360 NotebookApp] 警告:笔记本服务器正在监听所有IP地址且未使用加密。这是不推荐的。[W 19:33:16.360 NotebookApp] 警告:笔记本服务器正在监听所有IP地址且未使用身份验证。这非常不安全,不推荐使用。[I 19:33:16.365 NotebookApp] 从本地目录提供笔记本:/notebooks[I 19:33:16.365 NotebookApp] 0个活跃内核[I 19:33:16.365 NotebookApp] Jupyter笔记本正在运行于:http://[系统上的所有IP地址]:8888/[I 19:33:16.366 NotebookApp] 使用Control-C停止此服务器并关闭所有内核(两次跳过确认)。

然而,当我尝试访问localhost:8888上的Jupyter笔记本时,Chrome显示在几秒内无法访问该站点,并且服务器拒绝连接。

我尝试过的解决方案:

  • 按照这个StackOverflow帖子中的建议进行操作。当我运行他们建议的命令来启动一个新的TensorFlow容器时,我得到了以下错误:

    exec: "./run_jupyter.sh": stat ./run_jupyter.sh: 没有这样的文件或目录docker: 来自守护进程的错误响应:容器命令未找到或不存在。

    我还按照他们的建议更改了VirtualBox中的端口设置,这似乎也没有任何效果。

  • 我没有访问localhost,而是尝试使用命令docker-machine ls时列出的驱动程序的IP地址。这里也没有成功。

  • 我的第一次尝试是使用Docker附带的快速启动终端,但我卡在了相同的地方。所以现在我有一个“default”,这是我使用快速启动终端设置Docker时创建的,还有一个“my-default”,这是我使用PowerShell设置Docker时创建的。Stackexchange的评论说快速启动终端不如直接使用PowerShell好用,所以我现在开始使用PowerShell了。

  • 尝试使用docker-machine env更改活动的驱动程序,然后为该驱动程序的IP地址运行TensorFlow运行命令,仍然没有成功。

  • 尝试跳过Jupyter笔记本,直接从命令行通过Python运行一切,正如TensorFlow安装的下一步建议的那样(“从命令行运行TensorFlow”),但我甚至无法从那里导入TensorFlow:

     >>> import tensorflow as tf Traceback (most recent call last):   File "<stdin>", line 1, in <module> ImportError: 没有名为tensorflow的模块

    我不知道这是否在不先运行Jupyter的情况下是可能的,但我觉得值得一试。这个问题可能与本帖无关,但如果有人知道为什么会这样,那也将是有帮助的。

我非常感谢提供的所有帮助。请告诉我是否有任何我陈述的内容不够清楚,或者我是否可以提供更多关于我尝试过的细节。非常感谢您的提前帮助。


回答:

尝试在docker run命令中添加-p 8888:8888。

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

这个TensorFlow问题中找到了解决方案,在HWiese1980的评论中

由于Docker通常需要Docker主机系统与Docker容器中的操作系统相同(嗯,是部分相同),因此您需要一个Linux虚拟机来在Windows下运行基于Linux的Docker容器。Docker本身会在虚拟机和容器之间打开8888端口。您必须明确告诉它通过使用上述参数-p 8888:8888从虚拟机外部转发端口到打开的Docker容器端口。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注