standard_init_linux.go:211:execユーザープロセスが「exec形式エラー」を引き起こした


9

以下のminikube windows 10システムで実行されるpythonスクリプト用のDockerfileを構築していますが、これは私のDockerfileです

以下のコマンドを使用してドッカーを構築する 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形式エラー」を引き起こした

回答:


10

コマンドcommand: [/app/helloworld.py]をyamlファイルに追加していることがわかります。

だからあなたは(Dockerfileで)する必要があります:

RUN chmod +x /app/helloworld.py

pyファイルにシバンを設定します。

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

またはで行ったのと同じコマンドを設定します Dockerfile


6

logstashコンテナーを実行しているときに最近問題が発生しました

standard_init_linux.go:211:execユーザープロセスが「exec形式エラー」を引き起こした

entrypoint.shのシバン行(#!/ bin / sh)が、entrypoint.shファイルの1行目ではなく2行目に入力されていることに注意してください。

スクリプトの最初の行に関してシバン行が作成されると、エラーはなくなり、「docker run -it logstashimage:latest sh」は完全に機能しました。


私はこれに少しひねりを加えて遭遇しました、私にはシバンがなく、それを元に戻す必要がありました。
John Siu

2

Windowsで dockerを実行すると、別の2つの理由でこの問題が発生する可能性があります

  • スクリプトの行末がLFではない(Linux)
  • スクリプトのエンコードはutf-8 + BOMである必要があります
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.