次の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
しかし、まだエラーが発生します。
Dockerfileで、代わりに追加してみてください:
RUN python -m nltk.downloader punkt
これによりコマンドが実行され、要求されたファイルが//nltk_data/
にインストールされます
この問題は、DockerfileでのCMDとRUNの使用に関連している可能性が高いです。 CMDのドキュメント:
CMDの主な目的は、実行中のコンテナにデフォルトを提供することです。
ビルド中ではなく、docker run <image>
中に使用されます。そのため、他のCMD行はおそらく最後のCMD python app.py
行によって上書きされました。
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"]