standard_init_linux.go: 211: користувацький процес exec спричинив "помилку формату exec"


10

Я будую Dockerfile для python-скрипту, який буде працювати в системі minikube windows 10 нижче, це мій Dockerfile

Створення докера за допомогою команди нижче docker build -t python-helloworld .

і завантаження цього в демон докер minikube docker save python-helloworld | (eval $(minikube docker-env) && docker load)

Докер-файл

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

Але отримання наведеної нижче роботи з помилками не працює scuessfully, але коли ви запустили 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

Ще дві причини можуть викликати цю проблему, якщо ви запускаєте докер в Windows :

  • Кінцеві рядки скриптів не є LF (Linux)
  • кодування сценаріїв повинно бути utf-8 + BOM
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.