2017-02-03 3 views
2

파이썬 2.7에서 하위 프로세스를 호출하려고합니다. 이 서브 프로세스는 JAVA jar 파일을 실행하고 출력을 읽습니다. 나는 docker 컨테이너에서 django를 사용하고 있습니다.도커 컨테이너에서 파이썬 하위 프로세스를 호출하는 중 오류가 발생했습니다.

나는 함수를 호출하고 있습니다 : 여기

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 

는, HT 내 장고 응용 프로그램 내부의 폴더입니다. 나는 executable.jar을 사용하고 출력을 읽으려고합니다. 다른 인수는 실행 파일을 실행하기위한 것입니다. tmp_files_dir 2 개 파일이 있습니다

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 

: 다음은 생성 된 오류입니다. 로컬 컴퓨터에서 실행 파일을 실행할 때 동일한 인수가 결과를 제공하지만이 중 하나는 결과를 제공하지 않습니다. 무슨 일이 일어날 지에 대한 단서가 있습니까?

편집

항아리 장소에 있지만 서브 프로세스 호출이 실패합니다. 로컬에서는 잘 돌아갑니다. 숙련 된 전문가의 의견으로 도커 파일을 살펴 봤는데 Java가 컨테이너 안에없는 것을 알게되었습니다. 이 컨테이너에 Java 설치를 시도했지만 빌드가 실패했습니다.

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

내 수정 고정 표시기 파일은 다음과 같습니다 :

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

나는 나의 현재 컨테이너에 자바를 설치하려면 다음 소스를 읽고 그는 실패한다. 나는 그것에 익숙하지 않기 때문에 항만 노동자에 대한 지식이 매우 제한적이며 누군가가 문제를 파악하는 데 도움이된다면 고맙겠습니다.

+1

Docker 파일을 공유하십시오. –

+0

jar 파일이 수동으로 존재하는지 확인하십시오. 'docker exec -it bash'를 실행하고 python 스크립트와 같은 명령을 실행하십시오. –

답변

0

좋아, 그래서 알아 냈어. 나는 python 2.7의 기본 이미지를 사용하고 있었다. 우분투로 변경했고, 내가 사용하기를 원하는 자바, 파이썬, 루비를 설치했다.

관련 문제