standard_init_linux.go: 211: quá trình người dùng exec gây ra lỗi định dạng exec exec


9

Tôi đang xây dựng Dockerfile cho kịch bản python sẽ chạy trong hệ thống minikube windows 10 bên dưới là Dockerfile của tôi

Xây dựng docker bằng lệnh dưới đây docker build -t python-helloworld .

và tải nó trong minikube docker quỷ docker save python-helloworld | (eval $(minikube docker-env) && docker load)

Docker tập tin

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

tập tin pythoncronjob.yml (tập tin công việc 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

Dưới đây là lệnh để chạy công việc Kubernetes này kubectl create -f pythoncronjob.yml

Nhưng nhận được công việc lỗi dưới đây không phải là chạy một cách khéo léo mà là khi bạn chạy Dockerfile một mình nó hoạt động tốt

standard_init_linux.go: 211: quá trình người dùng exec gây ra "lỗi định dạng exec"

Câu trả lời:


10

Tôi có thể thấy rằng bạn thêm lệnh command: [/app/helloworld.py]vào tập tin yaml.

vì vậy bạn cần (trong Dockerfile):

RUN chmod +x /app/helloworld.py

đặt shebang vào pytập tin của bạn :

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

hoặc thiết lập lệnh giống như bạn đã làm trong Dockerfile


6

Gần đây tôi đã gặp sự cố khi chạy bộ chứa logstash

standard_init_linux.go: 211: quá trình người dùng exec gây ra "lỗi định dạng exec"

Lưu ý rằng dòng shebang (#! / Bin / sh) trên entrypoint.sh đã được nhập vào dòng thứ hai thay vì dòng đầu tiên của tệp entrypoint.sh.

Khi dòng shebang được tạo thành dòng đầu tiên trong tập lệnh, lỗi sẽ biến mất và "docker run -it logstashimage: mới nhất sh" hoạt động hoàn hảo.


Tôi gặp phải điều này với một chút thay đổi, tôi không có shebang và phải thêm nó trở lại.
John Siu

2

Hai lý do khác có thể nêu ra vấn đề này nếu bạn chạy docker trên Windows :

  • kết thúc dòng script không phải là LF (linux)
  • mã hóa tập lệnh phải là utf-8 + BOM
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.