2015-06-30 5 views
6

Ich bin ein Docker Behälterbau mit dem folgenden Dockerfile:Docker NLTK Herunterladen

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 

Alles geht gut, bis ich das Bild laufen und erhalten den folgenden Fehler:

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

ich dieses Problem gehabt haben vor und es wird diskutiert here aber ich bin mir nicht sicher, wie man es mit Docker angehen. Ich habe versucht:

CMD python 
CMD import nltk 
CMD nltk.download() 

sowie:

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

Aber ich immer noch den Fehler.

+0

das ist falsch "CMD Python CMD import nltk CMD nltk.download()" es die gleichen wie offen ist ein Terminal, Typ 'python' Öffnen einen anderen Terminal, Typ' import nltk' und so (natürlich die zweiter Befehl wird fehlschlagen, wie es nicht in Python ist – user2915097

+1

vielleicht 'RUN python -c 'import nltk; nltk.download()'' oder so ähnlich (ich bin mir nicht sicher über die Syntax) – user2915097

Antwort

13

In Ihrem Dockerfile, versuchen Sie stattdessen:

RUN python -m nltk.downloader punkt

Dies wird den Befehl, und installieren Sie die gewünschten Dateien zu //nltk_data/

Das Problem ist höchstwahrscheinlich im Zusammenhang mit mit CMD vs. RUN im Dockerfile laufen . Dokumentation für CMD:

The main purpose of a CMD is to provide defaults for an executing container.

, die während docker run <image>, nicht während des Build verwendet wird. So wurden wahrscheinlich andere CMD-Zeilen von der letzten CMD python app.py Zeile überschrieben.

+0

weißt du, wenn ich nur COPY den nltk_data-Ordner, muss ich sowohl unkomprimierte Ordner und zip-Dateien oder nur zipfiles kopieren? – perrohunter

+0

Ich verwende diesen Ansatz, aber ich bekomme diesen Fehler: /usr/local/lib/python3.6/runpy.py:125: RuntimeWarning: 'nltk.downloader' gefunden in sys.modules nach dem Import des Pakets 'nltk', aber vor der Ausführung von 'nltk.downloader'; dies kann zu unvorhersehbarem Beh führen aviour – xzegga