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/
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.
Bitte teilen Sie Ihre Dockerfile –
lässt überprüfen, ist JAR-Datei manuell vorhanden. Führe 'docker exec -it bash' aus und versuche, Befehle wie Python-Skripte auszuführen –