standard_init_linux.go: 211: o processo do usuário exec causou "erro de formato exec"

9

Estou construindo o Dockerfile para script python que será executado no sistema minikube windows 10 abaixo é o meu Dockerfile

Construindo a janela de encaixe usando o comando abaixo docker build -t python-helloworld .

e carregando isso no minikube docker demon docker save python-helloworld | (eval $(minikube docker-env) && docker load)

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

Arquivo pythoncronjob.yml (arquivo de tarefa 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

Abaixo está o comando para executar este trabalho do Kubernetes kubectl create -f pythoncronjob.yml

Mas obter o trabalho de erro abaixo não está sendo executado com scuessfully, mas quando você executou o Dockerfile sozinho, seu trabalho está bom

standard_init_linux.go: 211: o processo do usuário exec causou "erro de formato exec"

Pandit Biradar
fonte

Respostas:

10

Eu posso ver que você adiciona o comando command: [/app/helloworld.py]ao arquivo yaml.

então você precisa (no Dockerfile):

RUN chmod +x /app/helloworld.py

defina shebang no seu pyarquivo:

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

ou configure o comando da mesma forma que você fez em Dockerfile

LinPy
fonte
6

Encontrei recentemente o problema ao executar um contêiner de logstash

standard_init_linux.go: 211: o processo do usuário exec causou "erro de formato exec"

Observe que a linha shebang (#! / Bin / sh) no entrypoint.sh foi digitada na segunda linha, em vez da primeira linha do arquivo entrypoint.sh.

Quando a linha shebang é feita quanto à primeira linha do script, o erro desapareceu e "docker run -it logstashimage: sh mais recente" funcionou perfeitamente.

Sajith Kumar Ganesan
fonte
Encontro isso com uma ligeira torção, não tenho shebang e tive que adicioná-lo de volta.
John Siu
2

Outros dois motivos podem causar esse problema se você executar o docker no Windows :

  • terminações de linha de scripts não são LF (linux)
  • a codificação dos scripts deve ser utf-8 + BOM
DennisKot
fonte