I am building the Dockerfile for python script which will run in minikube windows 10 system below is my Dockerfile
Building the docker using the below command
docker build -t python-helloworld .
and loading that in minikube docker demon
docker save python-helloworld | (eval $(minikube docker-env) && docker load)
Docker File
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 file (cron job file)
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
Below is the command to run this Kubernetes job
kubectl create -f pythoncronjob.yml
But getting the below error job is not running scuessfully but when u ran the Dockerfile alone its work fine
standard_init_linux.go:211: exec user process caused "exec format error"
This can also happen when your host machine has a different architecture from your guest container image.
E.g. running an arm container on a host with x86-64 architecture
I can see that you add the command command: [/app/helloworld.py]
to yaml file.
so you need to (in Dockerfile):
RUN chmod +x /app/helloworld.py
set shebang to your py
file:
#!/usr/bin/env python # whatever your defualt python to run the script
or setup the command the same as you did in Dockerfile
I recently encountered the problem when running a logstash container
standard_init_linux.go:211: exec user process caused "exec format error"
Noticed that the shebang line (#!/bin/sh) on the entrypoint.sh was typed in the second line instead of the first line of the entrypoint.sh file.
When the shebang line is made as to the first line in the script, the error went away and "docker run -it logstashimage:latest sh" worked perfectly.
You probably compile your docker image for the wrong platform.
For instance, if you run on arm64 (Apple M1 or M2?) and want to compile to run on linux, you shall use the --platform option of docker build.
docker build --platform linux/amd64 -t registry.gitlab.com/group/project:1.0-amd64 ./
If you use docker-compose.yml
to build your image, use:
services:
app:
platform: linux/amd64
build:
context: ./myapp
...
For the docker platform naming list, and more info, you should read: https://docs.docker.com/build/building/multi-platform/
tip: to build for multiple platforms, use --platform linux/amd64,linux/arm64
I had this issue recently. Sharing my experience here. Basically I was trying to run a ARM
docker image on X86_64
architecture.
Here is the steps I have followed
Check host architecture
uname -m # Display the host architecture
#x86_64
docker pull arm32v7/ubuntu # Get ARM docker image
docker run --rm -t arm32v7/ubuntu uname -m
standard_init_linux.go:211: exec user process caused "exec format error"
Setting up ARM emulation on x86
Using QEMU allows us to to build ARM binaries on x86 machine without needing a cross compiler.
sudo apt-get install qemu binfmt-support qemu-user-static # Install the qemu packages
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes # This step will execute the registering scripts
Run the docker image
$ docker run --rm -t arm32v7/ubuntu uname -m
armv7l
Reference : Building ARM container on x86
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With