standard_init_linux.go: 211: processo utente exec causato "errore formato exec"


10

Sto costruendo il Dockerfile per script Python che verrà eseguito nel sistema Windows 10 minikube di seguito è il mio Dockerfile

Costruire la finestra mobile usando il comando seguente docker build -t python-helloworld .

e caricandolo nel demone docker minikube docker save python-helloworld | (eval $(minikube docker-env) && docker load)

File Docker

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

file pythoncronjob.yml (cron job file)

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

Di seguito è riportato il comando per eseguire questo lavoro Kubernetes kubectl create -f pythoncronjob.yml

Ma ottenere il processo di errore riportato di seguito non funziona in modo anomalo ma quando hai eseguito il Dockerfile da solo funziona bene

standard_init_linux.go: 211: processo utente exec causato "errore formato exec"

Risposte:


10

Vedo che aggiungi il comando command: [/app/helloworld.py]al file yaml.

quindi è necessario (in Dockerfile):

RUN chmod +x /app/helloworld.py

imposta shebang sul tuo pyfile:

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

o imposta il comando come hai fatto tu Dockerfile


6

Di recente ho riscontrato il problema durante l'esecuzione di un contenitore logstash

standard_init_linux.go: 211: processo utente exec causato "errore formato exec"

Notato che la riga shebang (#! / Bin / sh) su entrypoint.sh è stata digitata nella seconda riga anziché nella prima riga del file entrypoint.sh.

Quando la riga shebang è stata creata sulla prima riga dello script, l'errore è scomparso e "docker run -it logstashimage: latest sh" ha funzionato perfettamente.


Lo incontro con una leggera svolta, non ho shebang e ho dovuto aggiungerlo di nuovo.
John Siu,

2

Altri due motivi potrebbero sollevare questo problema se si esegue la finestra mobile su Windows :

  • le terminazioni di riga degli script non sono LF (linux)
  • la codifica degli script dovrebbe essere utf-8 + BOM
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.