standard_init_linux.go: 211: กระบวนการผู้ใช้ exec ทำให้เกิด "ข้อผิดพลาดรูปแบบ exec"


9

ฉันกำลังสร้าง Dockerfile สำหรับสคริปต์ไพ ธ อนซึ่งจะทำงานในระบบ minikube windows 10 ด้านล่างคือ Dockerfile ของฉัน

สร้างนักเทียบท่าโดยใช้คำสั่งด้านล่าง docker build -t python-helloworld .

และโหลดใน minikube docker อสูร docker save python-helloworld | (eval $(minikube docker-env) && docker load)

ไฟล์ 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"]

ไฟล์ 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 ถูกสร้างขึ้นเป็นบรรทัดแรกในสคริปต์ข้อผิดพลาดก็หายไปและ"นักเทียบท่าวิ่ง - มัน logstashimage: SH ล่าสุด"ทำงานได้อย่างสมบูรณ์


ฉันพบสิ่งนี้ด้วยการบิดเล็กน้อยฉันไม่มี shebang และต้องเพิ่มกลับ
John Siu

2

อีกเหตุผลสองประการที่สามารถยกปัญหานี้หากคุณเรียกนักเทียบท่าบนของ Windows :

  • การสิ้นสุดบรรทัดสคริปต์ไม่ใช่ LF (linux)
  • การเข้ารหัสสคริปต์ควรเป็น utf-8 + BOM
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.