我正在使用以下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
但我仍然得到错误。
答案 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"]