standard_init_linux.go: 211: le processus utilisateur exec a provoqué une "erreur de format exec"

10

Je construis le Dockerfile pour le script python qui fonctionnera dans le système minikube windows 10 ci-dessous est mon Dockerfile

Création du docker à l'aide de la commande ci-dessous docker build -t python-helloworld .

et le charger dans le démon docker minikube docker save python-helloworld | (eval $(minikube docker-env) && docker load)

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

fichier pythoncronjob.yml (fichier de tâche 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

Vous trouverez ci-dessous la commande pour exécuter ce travail Kubernetes kubectl create -f pythoncronjob.yml

Mais obtenir le travail d'erreur ci-dessous ne fonctionne pas correctement, mais lorsque vous avez exécuté le Dockerfile seul, son travail fonctionne correctement

standard_init_linux.go: 211: le processus utilisateur exec a provoqué une "erreur de format exec"

Pandit Biradar
la source

Réponses:

10

Je peux voir que vous ajoutez la commande command: [/app/helloworld.py]au fichier yaml.

vous devez donc (dans Dockerfile):

RUN chmod +x /app/helloworld.py

définissez shebang dans votre pyfichier:

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

ou configurez la commande de la même manière que dans Dockerfile

LinPy
la source
6

J'ai récemment rencontré le problème lors de l'exécution d'un conteneur logstash

standard_init_linux.go: 211: le processus utilisateur exec a provoqué une "erreur de format exec"

Vous avez remarqué que la ligne shebang (#! / Bin / sh) sur le point d'entrée.sh a été tapée dans la deuxième ligne au lieu de la première ligne du fichier entrypoint.sh.

Lorsque la ligne shebang est établie pour la première ligne du script, l'erreur a disparu et "docker run -it logstashimage: latest sh" a parfaitement fonctionné.

Sajith Kumar Ganesan
la source
Je rencontre cela avec une légère torsion, je n'ai pas de shebang et j'ai dû l'ajouter.
John Siu
2

Deux autres raisons pourraient soulever ce problème si vous exécutez Docker sous Windows :

  • les fins de ligne de scripts ne sont pas LF (linux)
  • l'encodage des scripts doit être utf-8 + BOM
DennisKot
la source