在Docker,tensorflow,Windows 10中使用本地文件系统和MySQL数据库

问题描述:

我最近切换到了一台新的(Windows 10)计算机,需要选择我在tensorflow中进行的一些开发。我的工作很好(与链接的文章有点不同),用docker run -d -P engineero/tensorflow:df_build(我的图像通过修改主repo的Dockerfile来引入一些额外的依赖关系)。但我还有两个问题:在Docker,tensorflow,Windows 10中使用本地文件系统和MySQL数据库

  1. 我找不出如何在我运行的Docker容器中使用和修改现有的jupyter笔记本。
  2. 我不知道如何连接到我的机器上运行的MySQL数据库。

对于我曾尝试添加-v /c/Users/path/to/my/files:/tensorflow/my_filesdocker run命令,以及/c/Users/path/to/my/files/*:/tensorflow/my_files。对于这两者,我在我的虚拟机中获得/tensorflow/my_files目录,但它是空的。我需要能够使用我的文件系统中现有的笔记本(以及其他一些文件),并且对这些文件所做的更改会保留在我的文件系统中。

对于,我真的不知道。 MySQL数据库当前正在Windows localhost上运行,但是如果我在脚本中引用localhost以连接到数据库,则会尝试连接到守护程序(我认为),这不是一样的:docker-machine ip不会给我127.0。 0.1(从Windows的角度来看,localhost),并且我必须连接到jupyter笔记本的IP /端口是我从docker-machine ipdocker ps -l获得的一些其他地址。

任何帮助将不胜感激。如果我完全在错误的页面上,我会欢迎讨论正确的方式去做这件事。我现在正在通过Docker documentation,但到目前为止我还没有找到解决方案。

编辑:数已经回答了,但数仍然在逃。

我没有在Windows上使用Docker,所以我无法回答你的第一个问题。但是,我可以回答你的第二个问题。当你在Windows/Mac上运行Docker时,它会在虚拟机内运行,因为你可能已经知道了。当您调用docker run时,它会创建一个可以被视为另一个VM的容器(实际上不是虚拟机,但仅用于某些用途)。因此,当您从容器内部引用localhost时,它将尝试连接到该容器内的localhost。为了克服这种情况,无论您从docker-machine ip获得的IP地址是什么,您都应该使用VM的IP地址(对于Mac,192.168.99.100,对于Windows,我想它也是一样的)。如果您碰巧使用Linux,则应使用主机的实际IP地址。

我根据你的评论编辑了以下内容。只有在Docker中运行MySQL时,以上才是真实的。如果您尝试连接到本机运行的MySQL,则应使用PC的实际IP地址(可通过Windows上的命令提示符使用ipconfig找到该地址),而不考虑操作系统。

我不知道你对虚拟机的概念有多熟悉。虚拟机就像独立的个人电脑,但不同之处在于它们在个人电脑内运行。如果你想从PC上与另一台电脑通话,最简单的方法是使用外部IP地址。 p.s.你也应该允许你的MySQL接受远程连接。 This link解释了你是如何做到的。

+0

所以你说我应该告诉我的脚本连接到码头IP(它实际上是192.168.99.100),即使我的数据库在Windows本地主机(127.0.0.1)上运行? – Engineero

+0

对不起,我误解了你的问题。错过了你本来正在运行MySQL的观点(当我试图回答这个问题时,我正在冲出去)。我在上面更正了我的答案。 – techtabu

+0

太好了,谢谢!这是有道理的,我只是没有想到它,因为我习惯于不需要在虚拟机中运行这些东西。我会给那一枪。 – Engineero