web-dev-qa-db-ja.com

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

しかし、まだエラーが発生します。

27
GNMO11

Dockerfileで、代わりに追加してみてください:

RUN python -m nltk.downloader punkt

これによりコマンドが実行され、要求されたファイルが//nltk_data/にインストールされます

この問題は、DockerfileでのCMDとRUNの使用に関連している可能性が高いです。 CMDのドキュメント:

CMDの主な目的は、実行中のコンテナにデフォルトを提供することです。

ビルド中ではなく、docker run <image>中に使用されます。そのため、他のCMD行はおそらく最後のCMD python app.py行によって上書きされました。

31
cchi

Djangoアプリケーション用にubuntuイメージとpython3を使用して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"]
1
ShreePrakash