standard_init_linux.go:211:exec用户进程导致“ exec格式错误”


9

我正在构建用于python脚本的Dockerfile,它将在下面的minikube Windows 10系统中运行

使用以下命令构建docker docker build -t python-helloworld .

并将其加载到minikube docker demon中 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格式错误”

Answers:


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格式错误”

注意,entrypointpoint.sh的shebang行(#!/ bin / sh)在第二行而不是entrypointpoint.sh文件的第一行中键入。

当在脚本的第一行进行了shebang行时,错误消失了,并且“ docker run -it logstashimage:latest sh”完美地工作了。


我遇到了轻微的扭曲,我没有shebang,不得不将其添加回去。

2

如果您在Windows上运行docker,还有两个原因可能会引起此问题:

  • 脚本行结尾不是LF(Linux)
  • 脚本编码应为utf-8 + BOM
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.