2017-02-03 5 views
2

Ich versuche, einen Unterprozess in Python 2.7 aufzurufen. Dieser Subprozess führt eine JAVA-JAR-Datei aus und liest die Ausgabe. Ich verwende Django in einem Andock-Container.Fehler beim Aufrufen des Python-Subprozesses im Docker-Container

Ich rufe eine Funktion:

def call_exec(lang) 
    curdir = curdir = 'ht/exec_folder' 
    tmp_files_dir = 'ht/temp_files' 
    script_args = ["java","-jar",'/'+curdir + "/executable.jar", 
     "-l",lang,"-s",'/'+tmp_files_dir] 
    output = subprocess.check_output(script_args) 
    return output 

Hier ht ein Ordner in meinem Django app ist. Ich versuche, ausführbare.jar zu verwenden und die Ausgabe zu lesen. Die anderen Argumente dienen zum Ausführen der ausführbaren Datei. Im Folgenden ist der Fehler erzeugt hat:

django_1 |  similarity = call_exec('english') 
django_1 | File "/app/langswipe/submissions/check_view.py", line 80, in call_exec 
django_1 |  output = subprocess.check_output(script_args) 
django_1 | File "/usr/local/lib/python2.7/subprocess.py", line 567, in check_output 
django_1 |  process = Popen(stdout=PIPE, *popenargs, **kwargs) 
django_1 | File "/usr/local/lib/python2.7/subprocess.py", line 711, in __init__ 
django_1 |  errread, errwrite) 
django_1 | File "/usr/local/lib/python2.7/subprocess.py", line 1343, in _execute_child 
django_1 |  raise child_exception 
django_1 | OSError: [Errno 2] No such file or directory 

Es gibt zwei Dateien im tmp_files_dir. Wenn ich die ausführbare Datei auf meinem lokalen Computer ausführen, geben die gleichen Argumente mir ein Ergebnis, aber dieses tut es nicht. Irgendwelche Hinweise auf was passiert?

EDIT

Das Glas ist vorhanden, aber der Subprozess Aufruf fehlschlägt. Lokal läuft es gut. Mit Kommentaren von erfahrenen Profis habe ich mir die Docker-Datei angeschaut und festgestellt, dass Java im Container fehlt. Ich habe versucht, Java auf diesem Container zu installieren, aber der Build ist fehlgeschlagen.

las ich die folgenden Quellen JAVA auf meinem jetzigen Container zu installieren:

Best way to install java 8 using docker?

https://www.ivankrizsan.se/2015/08/08/creating-a-docker-image-with-ubuntu-and-java/

https://raw.githubusercontent.com/docker-library/openjdk/e6e9cf8b21516ba764189916d35be57486203c95/8-jdk/Dockerfile

Meine modifizierte Docker-Datei ist:

FROM python:2.7 
ENV PYTHONUNBUFFERED 1 

# to accomodate slate 
RUN easy_install distribute 

# Requirements have to be pulled and installed here, otherwise caching won't work 
COPY ./requirements /requirements 

RUN pip install -r /requirements/production.txt && \ 
    mkdir -p /usr/share/nltk_data && \ 
    python -m nltk.downloader -d /usr/share/nltk_data punkt stopwords wordnet averaged_perceptron_tagger && \ 
    apt-get update && apt-get install poppler-utils -qy 



RUN groupadd -r django && useradd -r -g django django 
COPY . /app 
RUN chown -R django /app 

COPY ./compose/django/gunicorn.sh /gunicorn.sh 
COPY ./compose/django/entrypoint.sh /entrypoint.sh 
RUN sed -i 's/\r//' /entrypoint.sh 
RUN sed -i 's/\r//' /gunicorn.sh 
RUN chmod +x /entrypoint.sh && chown django /entrypoint.sh 
RUN chmod +x /gunicorn.sh && chown django /gunicorn.sh 


RUN apt-get update && apt-get install -y --no-install-recommends \ 
     bzip2 \ 
     unzip \ 
     xz-utils \ 
    && rm -rf /var/lib/apt/lists/* 

RUN echo 'deb http://deb.debian.org/debian jessie-backports main' > /etc/apt/sources.list.d/jessie-backports.list 

# Default to UTF-8 file.encoding 
ENV LANG C.UTF-8 

# add a simple script that can auto-detect the appropriate JAVA_HOME value 
# based on whether the JDK or only the JRE is installed 
RUN { \ 
     echo '#!/bin/sh'; \ 
     echo 'set -e'; \ 
     echo; \ 
     echo 'dirname "$(dirname "$(readlink -f "$(which javac || which java)")")"'; \ 
    } > /usr/local/bin/docker-java-home \ 
    && chmod +x /usr/local/bin/docker-java-home 

ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 

ENV JAVA_VERSION 8u111 
ENV JAVA_DEBIAN_VERSION 8u111-b14-2~bpo8+1 

# see https://bugs.debian.org/775775 
# and https://github.com/docker-library/java/issues/19#issuecomment-70546872 
ENV CA_CERTIFICATES_JAVA_VERSION 20140324 

RUN set -x \ 
    && apt-get update \ 
    && apt-get install -y \ 
     openjdk-8-jdk="$JAVA_DEBIAN_VERSION" \ 
     ca-certificates-java="$CA_CERTIFICATES_JAVA_VERSION" \ 
    && rm -rf /var/lib/apt/lists/* \ 
    && [ "$JAVA_HOME" = "$(docker-java-home)" ] 

# see CA_CERTIFICATES_JAVA_VERSION notes above 
RUN /var/lib/dpkg/info/ca-certificates-java.postinst configure 




WORKDIR /app 

ENTRYPOINT ["/entrypoint.sh"] 

T er baut scheitert. Ich habe sehr begrenzte Kenntnisse über Hafenarbeiter, da ich neu bin und ich würde mich freuen, wenn mir jemand helfen würde, das Problem herauszufinden.

+1

Bitte teilen Sie Ihre Dockerfile –

+0

lässt überprüfen, ist JAR-Datei manuell vorhanden. Führe 'docker exec -it bash' aus und versuche, Befehle wie Python-Skripte auszuführen –

Antwort

0

Okay, also habe ich es herausgefunden. Ich benutzte das Basisbild von Python 2.7 Ich änderte das zu Ubuntu und installierte Java, Python und Ruby, die ich verwenden wollte.

Verwandte Themen