standard_init_linux.go : 211 : exec 사용자 프로세스로 인해“exec 형식 오류”가 발생했습니다


9

아래의 minikube Windows 10 시스템에서 실행되는 Python 스크립트 용 Dockerfile을 빌드 중입니다.

아래 명령을 사용하여 도커 빌드 docker build -t python-helloworld .

minikube docker 악마에로드 docker save python-helloworld | (eval $(minikube docker-env) && docker load)

도커 파일

FROM python:3.7-alpine
#add user group and ass user to that group
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

#creates work dir   
WORKDIR /app

#copy python script to the container folder app
COPY helloworld.py /app/helloworld.py

#user is appuser
USER appuser

ENTRYPOINT  ["python", "/app/helloworld.py"]

pythoncronjob.yml 파일 (크론 작업 파일)

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: python-helloworld
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      backoffLimit: 5
      template:
        spec:
          containers:
          - name: python-helloworld
            image: python-helloworld
            imagePullPolicy: IfNotPresent
            command: [/app/helloworld.py]
          restartPolicy: OnFailure

다음은이 Kubernetes 작업을 실행하는 명령입니다. kubectl create -f pythoncronjob.yml

그러나 아래 오류 작업을 얻는 것은 제대로 수행되지 않지만 Dockerfile 만 단독으로 실행하면 제대로 작동합니다.

standard_init_linux.go : 211 : exec 사용자 프로세스로 인해 "exec 형식 오류"가 발생했습니다

답변:


10

command: [/app/helloworld.py]yaml 파일에 명령 을 추가하는 것을 볼 수 있습니다 .

따라서 (Dockerfile에서)

RUN chmod +x /app/helloworld.py

shebang을 py파일로 설정 하십시오.

#!/usr/bin/env python # whatever your defualt python to run the script

또는 당신이했던 것과 같은 명령을 설정 Dockerfile


6

최근에 logstash 컨테이너를 실행할 때 문제가 발생했습니다.

standard_init_linux.go : 211 : exec 사용자 프로세스로 인해 "exec 형식 오류"가 발생했습니다

entrypoint.sh의 shebang 행 (#! / bin / sh)이 entrypoint.sh 파일의 첫 번째 행 대신 두 번째 행에 입력되었습니다.

스크립트의 첫 번째 줄에 대해 shebang 행이 만들어지면 오류가 사라지고 "docker run -it logstashimage : latest sh"가 완벽하게 작동했습니다.


나는 약간의 꼬임으로 이것을 만났고, 나는 세방이 없으며 그것을 다시 추가해야했다.
John Siu

2

Windows 에서 docker를 실행하면 다른 두 가지 이유로이 문제가 발생할 수 있습니다 .

  • 스크립트 줄 끝이 LF가 아닙니다 (Linux)
  • 스크립트 인코딩은 utf-8 + BOM이어야합니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.