Docker NLTK下载

时间:2015-06-30 15:56:04

标签: python docker nltk

我正在使用以下Dockerfile构建一个docker容器:

FROM ubuntu:14.04

RUN apt-get update

RUN apt-get install -y python python-dev python-pip

ADD . /app

RUN apt-get install -y python-scipy

RUN pip install -r /arrc/requirements.txt

EXPOSE 5000

WORKDIR /app

CMD python app.py

一切顺利,直到我运行图像并出现以下错误:

**********************************************************************
  Resource u'tokenizers/punkt/english.pickle' not found.  Please
  use the NLTK Downloader to obtain the resource:  >>>
  nltk.download()
  Searched in:
    - '/root/nltk_data'
    - '/usr/share/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/lib/nltk_data'
    - '/usr/local/lib/nltk_data'
    - u''
**********************************************************************

之前我遇到过这个问题并且讨论过here但是我不知道如何使用Docker来解决它。我试过了:

CMD python
CMD import nltk
CMD nltk.download()

以及:

CMD python -m nltk.downloader -d /usr/share/nltk_data popular

但我仍然得到错误。

3 个答案:

答案 0 :(得分:25)

在Dockerfile中,请尝试添加:

  

RUN python -m nltk.downloader punkt

这将运行命令并将请求的文件安装到//nltk_data/

问题很可能与在Dockerfile中使用CMD与RUN有关。 CMD文档:

  

CMD的主要目的是为执行容器提供默认值。

docker run <image>期间使用,而不是在构建期间使用。因此,其他CMD行可能被最后一行CMD python app.py行覆盖。

答案 1 :(得分:2)

好吧,我尝试了所有建议的方法,但是没有用,所以我意识到nltk模块在/ root / nltk_data中搜索

步骤1:我在机器上下载了punkt 通过使用

python3
>>import nltk
>>nltk.download('punkt')

该点位于/ root / nltk_data / tokenizer

第2步:我将tokenizer文件夹复制到我的导演 我的目录看起来像这样

.
|-app/
|-tokenizers/
|--punkt/
|---all those pkl files
|--punkt.zip

和 第3步:然后我修改了Dockerfile,将其复制到了我的Docker实例

COPY ./tokenizers /root/nltk_data/tokenizers

第4步:新实例有漏洞

答案 2 :(得分:1)

在使用ubuntu镜像和python3为Django应用程序创建docker镜像时,我面临着同样的问题。

我决定如下。

# start from an official image
FROM ubuntu:16.04

RUN apt-get update \
  && apt-get install -y python3-pip python3-dev \
  && apt-get install -y libmysqlclient-dev python3-virtualenv

# arbitrary location choice: you can change the directory
RUN mkdir -p /opt/services/djangoapp/src
WORKDIR /opt/services/djangoapp/src

# copy our project code
COPY . /opt/services/djangoapp/src

# install dependency for running service
RUN pip3 install -r requirements.txt
RUN python3 -m nltk.downloader punkt
RUN python3 -m nltk.downloader wordnet

# Setup supervisord
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# Start processes
CMD ["/usr/bin/supervisord"]