在docker容器或docker映像中使用Tensorflow的正确方法是什么?

在docker容器或docker映像中使用Tensorflow的正确方法是什么?,docker,tensorflow,dockerfile,Docker,Tensorflow,Dockerfile,我试图用Tensorflow运行一个简单的docker容器(首先是CPU)。我认为最好只设置一次Dockerimage(即,不要每次运行容器时都更新tensorflow版本) 为了做到这一点,在我的Dockerfile中建议我做如下操作(评论来自给我建议的来源): 但是,当我运行Docker容器时,我确实执行了pip list,并且没有看到Tensorflow在任何地方可用。另外,当我运行脚本时,我遇到了一个常见的错误: ImportError: No module named 'tensorf

我试图用Tensorflow运行一个简单的docker容器(首先是CPU)。我认为最好只设置一次Dockerimage(即,不要每次运行容器时都更新tensorflow版本)

为了做到这一点,在我的Dockerfile中建议我做如下操作(评论来自给我建议的来源):

但是,当我运行Docker容器时,我确实执行了
pip list
,并且没有看到Tensorflow在任何地方可用。另外,当我运行脚本时,我遇到了一个常见的错误:

ImportError: No module named 'tensorflow'
我想了一个解决这个问题的方法,就是让Dockerfile显式地安装
pip3
tensorflow。我计划制作一个bash脚本并让Dockerfile运行它:

# bash script intall_tensorflow.sh 
# to install Tensorflow in container
export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.12.0rc1-py3-none-any.whl
pip3 install --upgrade $TF_BINARY_URL
然后只需添加到docker文件:

RUN sh intall_tensorflow.sh
然而,我的直觉告诉我,这可能是错误的或太老套了。如果我以后要手动安装tensorflow,为什么首先需要gcr.io/tensorflow/tensorflow的tensorflow基本映像

我试着在网上搜索gcr.io/tensorflow/tensorflow
可能在做什么,但我没有发现任何超级有用的东西。有人知道从图像本身(即从构建Docker图像)在Docker容器中使用Tensorflow的正确方法吗

抱歉,如果我真的很笨,但它只是觉得我做错了什么,我无法在网上找到解决我的问题的东西



在看了答案之后,似乎主要的问题可能是由于某种原因,Python3找不到tensorflow,但Python2可以。这是否意味着我需要自己直接安装TensorFlow(docker图像中有pip)才能获得TensorFlow的正确版本?

从您对pip3的使用情况来看,您使用的是python 3吗?这可能会引起你的问题。我试图重现您的问题,但python 2似乎工作正常

user@computer:~$ docker run -it gcr.io/tensorflow/tensorflow /bin/bash
root@61bb0f99582b:/notebooks# python
Python 2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
>>>
root@61bb0f99582b:/notebooks# python3
Python 3.4.3 (default, Oct 14 2015, 20:28:29)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'tensorflow'
>>>
user@computer:~$docker run-it gcr.io/tensorflow/tensorflow/bin/bash
root@61bb0f99582b:/笔记本电脑#python
Python 2.7.6(默认,2016年10月26日,20:30:19)
[GCC 4.8.4]关于linux2
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>输入张量流
>>>
root@61bb0f99582b:/笔记本电脑#蟒蛇3
Python 3.4.3(默认值,2015年10月14日,20:28:29)
linux上的[GCC 4.8.4]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>输入张量流
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:没有名为“tensorflow”的模块
>>>

如果出于某种原因,这仍然会导致您出现问题,您也可以按照描述的方式自行安装。docker的一个优点是,当它从DockerFile创建图像时,它会缓存图像,所以不会在每次构建图像时都重新安装tensorflow。解释一些概念

我重复了你的建议。当我使用python3时,它似乎没有意识到安装了tensorflow。也许
gcr.io/tensorflow/tensorflow
在Python2中使用tensorflow二进制文件。你知道这是不是真的吗?另外,除了手动(如我所建议的)在docker中安装tensorflow for python 3之外,没有其他方法了吗?还有,为什么在docker运行结束时需要bash命令,如果没有它,这个特定的图像会出现一些奇怪的笔记本警告,这些警告似乎有安全问题。但是,运行容器而不使用来自其他图像的bash似乎是不错的。你知道为什么有时候需要bash,有时候不需要吗?是的,实际上需要,只需要使用一个合适的标记,例如gcr.io/tensorflow/tensorflow:latest-py3。对于不同标记的列表,您可以在这里查看示例:或者只需在浏览器中遵循gcr.io/tensorflow/tensorflow链接使用/bin/bash的原因是为了进入容器的bash。如果您检查tensorflow/tensorflow图像,您会发现它以CMD[“/run_jupyter.sh”]结尾,它可能运行jupyter笔记本。如果未指定,则默认为bash。更多细节
user@computer:~$ docker run -it gcr.io/tensorflow/tensorflow /bin/bash
root@61bb0f99582b:/notebooks# python
Python 2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
>>>
root@61bb0f99582b:/notebooks# python3
Python 3.4.3 (default, Oct 14 2015, 20:28:29)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'tensorflow'
>>>