standard_init_linux.go: 211: пользовательский процесс exec вызвал «ошибку формата exec»


10

Я создаю Dockerfile для скрипта Python, который будет работать в системе Minikube Windows 10 ниже мой Dockerfile

Сборка докера с помощью команды ниже docker build -t python-helloworld .

и загрузка что в миникубе докер демон docker save python-helloworld | (eval $(minikube docker-env) && docker load)

Docker File

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 (файл заданий 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

Ниже приведена команда для запуска этого задания в Kubernetes. kubectl create -f pythoncronjob.yml

Но получение нижеприведенного сообщения об ошибке не запускается случайно, но когда вы запускаете только Dockerfile, все работает нормально

standard_init_linux.go: 211: пользовательский процесс exec вызвал «ошибку формата exec»

Ответы:


10

Я вижу, что вы добавляете команду command: [/app/helloworld.py]в файл yaml.

так что вам нужно (в Dockerfile):

RUN chmod +x /app/helloworld.py

установите shebang в ваш pyфайл:

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

или настройте команду так же, как вы это делали в Dockerfile


6

Я недавно столкнулся с проблемой при запуске контейнера logstash

standard_init_linux.go: 211: пользовательский процесс exec вызвал «ошибку формата exec»

Заметил, что строка shebang (#! / Bin / sh) на entrypoint.sh была напечатана во второй строке вместо первой строки файла entrypoint.sh.

Когда в первой строке скрипта была сделана строка shebang, ошибка исчезла, и «docker run -it logstashimage: latest sh» сработал отлично.


Я сталкиваюсь с этим с легким поворотом, у меня нет шебанга, и мне пришлось добавить его обратно.
Джон Сиу

2

Еще две причины могут поднять эту проблему, если вы запускаете Docker в Windows :

  • Скрипты конца строки не являются LF (Linux)
  • кодировка скриптов должна быть utf-8 + BOM
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.