standard_init_linux.go: 211: Der Exec-Benutzerprozess hat einen "Exec-Formatfehler" verursacht.

9

Ich erstelle das Dockerfile für Python-Skript, das im folgenden Minikube Windows 10-System ausgeführt wird. Es ist mein Dockerfile

Erstellen Sie das Docker mit dem folgenden Befehl docker build -t python-helloworld .

und das in Minikube Docker Dämon laden docker save python-helloworld | (eval $(minikube docker-env) && docker load)

Docker-Datei

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 Datei (Cron Job Datei)

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

Unten finden Sie den Befehl zum Ausführen dieses Kubernetes-Jobs kubectl create -f pythoncronjob.yml

Aber der folgende Fehlerjob wird nicht erfolgreich ausgeführt, aber wenn Sie das Dockerfile alleine ausgeführt haben, funktioniert es einwandfrei

standard_init_linux.go: 211: Exec-Benutzerprozess verursacht "Exec-Formatfehler"

Pandit Biradar
quelle

Antworten:

10

Ich kann sehen, dass Sie den Befehl command: [/app/helloworld.py]zur Yaml-Datei hinzufügen .

Sie müssen also (in Dockerfile):

RUN chmod +x /app/helloworld.py

Setze Shebang auf deine pyDatei:

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

oder richten Sie den Befehl genauso ein wie in Dockerfile

LinPy
quelle
6

Ich habe kürzlich das Problem beim Ausführen eines Logstash-Containers festgestellt

standard_init_linux.go: 211: Exec-Benutzerprozess verursacht "Exec-Formatfehler"

Es wurde festgestellt, dass die shebang-Zeile (#! / Bin / sh) in entrypoint.sh in der zweiten Zeile anstelle der ersten Zeile der Datei entrypoint.sh eingegeben wurde.

Wenn die Shebang-Zeile in Bezug auf die erste Zeile im Skript erstellt wurde, verschwand der Fehler und "Docker run -it logstashimage: latest sh" funktionierte perfekt.

Sajith Kumar Ganesan
quelle
Ich begegne dem mit einer leichten Wendung, ich habe keinen Schebang und musste ihn wieder hinzufügen.
John Siu
2

Weitere zwei Gründe können dieses Problem verursachen, wenn Sie Docker unter Windows ausführen :

  • Skriptzeilenenden sind nicht LF (Linux)
  • Die Codierung der Skripte sollte utf-8 + BOM sein
DennisKot
quelle