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

我试图运行一个简单的docker容器与Tensorflow可用(首先与CPU)。 我认为这将是一个好主意,只设置我的Dockerimage只有一次(即不更新张量stream版本每次我运行一个容器)。

为了做到这一点,我build议在我的Dockerfile中做如下操作(注释源自给出了我的build议):

# This means you derive your docker image from the tensorflow docker image FROM gcr.io/tensorflow/tensorflow 

然而,当我运行我的Docker容器时,我做了pip list ,并没有看到任何地方Tensorflow可用,当我跑我的脚本我得到了熟悉的错误:

 ImportError: No module named 'tensorflow' 

我想通过只有我的Dockerfile明确pip3 install 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 

然而,我的直觉告诉我这可能是错的或太hacky。 为什么我要在第一个地方需要tensorflow base image FROM gcr.io/tensorflow/tensorflow如果我以后要手动安装Tensorflow?

我尝试过在线研究gcr.io/tensorflow/tensorflow可能在做什么,但是我没有发现任何超级有用的东西。 是否有人知道从图像本身(例如,构buildDocker镜像)在Docker容器中提供Tensorflow的正确方式?

对不起,如果我真的很密集,但它只是觉得我做错了什么,我找不到解决我的问题的在线。


看到答案后,似乎主要的问题可能是python 3找不到tensorflow由于某种原因,但python 2可以。 这是否意味着我需要自己直接安装TensorFlow(在Docker镜像中使用pip),才能使用正确版本的TensorFlow?

根据你使用的pip3来判断 – 你使用的是python 3吗? 这可能会导致你的问题。 我试图重新创build你的问题,但python2似乎工作正常:

 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' >>> 

如果出于某种原因仍然会导致您的问题,您也可以按照您描述的方式自行安装。 Docker的一个好处就是它在从Dockerfiles创build图像时caching图像,所以每次构build图像​​时都不会重新安装张量。 本文解释了一些概念。

Interesting Posts