standard_init_linux.go: 211: proces użytkownika exec spowodował „błąd formatu exec”

9

Buduję plik Dockerfile dla skryptu python, który będzie działał w systemie Windows 10 minikube poniżej to mój plik Docker

Budowanie okna dokowanego za pomocą poniższego polecenia docker build -t python-helloworld .

i ładowanie tego do demona dokera minikube docker save python-helloworld | (eval $(minikube docker-env) && docker load)

Plik dokera

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"]

plik pythoncronjob.yml (plik zadania cron)

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

Poniżej znajduje się polecenie uruchomienia tego zadania Kubernetes kubectl create -f pythoncronjob.yml

Ale otrzymanie poniższego zadania błędu nie działa płynnie, ale kiedy uruchomiłeś sam plik Dockerfile, jego działanie jest w porządku

standard_init_linux.go: 211: proces użytkownika exec spowodował „błąd formatu exec”

Pandit Biradar
źródło

Odpowiedzi:

10

Widzę, że dodajesz polecenie command: [/app/helloworld.py]do pliku yaml.

więc musisz (w Dockerfile):

RUN chmod +x /app/helloworld.py

ustaw shebang na swój pyplik:

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

lub skonfiguruj polecenie tak samo, jak w Dockerfile

LinPy
źródło
6

Ostatnio napotkałem problem podczas uruchamiania kontenera logstash

standard_init_linux.go: 211: proces użytkownika exec spowodował „błąd formatu exec”

Zauważyłem, że linia shebang (#! / Bin / sh) w pliku entrypoint.sh została wpisana w drugiej linii zamiast w pierwszej linii pliku entrypoint.sh.

Kiedy linia shebang jest tworzona do pierwszej linii w skrypcie, błąd zniknął i „docker run -it logstashimage: latest sh” działał idealnie.

Sajith Kumar Ganesan
źródło
Napotykam to z lekkim zwrotem, nie mam shebang i musiałem to dodać.
John Siu
2

Kolejne dwa powody mogą podnieść ten problem, jeśli uruchomisz okno dokowane w systemie Windows :

  • zakończenia linii skryptów nie są LF (linux)
  • kodowanie skryptów powinno być utf-8 + BOM
DennisKot
źródło