Estoy creando el Dockerfile para el script python que se ejecutará en el sistema minikube windows 10 a continuación es mi Dockerfile
Construyendo la ventana acoplable usando el siguiente comando docker build -t python-helloworld .
y cargando eso en minikube docker demon docker save python-helloworld | (eval $(minikube docker-env) && docker load)
Archivo acoplable
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"]archivo pythoncronjob.yml (archivo de trabajo 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 A continuación se muestra el comando para ejecutar este trabajo kubectl create -f pythoncronjob.yml
Pero obtener el trabajo de error a continuación no se ejecuta correctamente, pero cuando ejecutó Dockerfile solo, funciona bien
standard_init_linux.go:211: el proceso de usuario exec provocó un "error de formato exec"
Para aquellos en arm64 (¿Apple M1?) Que quieren compilar para un uso de producción, logré hacerlo funcionar con la opción --platform de docker build.
docker build --platform linux/amd64 -t registry.gitlab.com/group/project:1.0-amd64 ./ puede, por otro lado, elegir linux/arm64 .
Rufus tiene razón, me encontré con este problema al intentar crear una imagen de servidor x86 en mi MacBook M1, que es arm64.
Pude crear la arquitectura de destino correcta al agregar el atributo "plataforma" a mi docker-compose.yml.
services: web: image: myimage/web:latest platform: linux/x86_64 build: context: ./myfolder dockerfile: Dockerfile.prodMe encontré exactamente con el mismo mensaje de error. Se solucionó instalando qemu en la máquina host. Ni idea del motivo.
Tuve este problema recientemente. Compartiendo mi experiencia aquí. Básicamente, estaba tratando de ejecutar una imagen acoplable ARM en la arquitectura X86_64 .
Aquí están los pasos que he seguido.
Comprobar la arquitectura del host
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"Configuración de la emulación ARM en x86
El uso de QEMU nos permite crear binarios ARM en una máquina x86 sin necesidad de un compilador cruzado.
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 scriptsEjecute la imagen de la ventana acoplable
$ docker run --rm -t arm32v7/ubuntu uname -m armv7lReferencia: Construyendo un contenedor ARM en x86
Esto también puede suceder cuando su máquina host tiene una arquitectura diferente de la imagen de su contenedor invitado.
Por ejemplo, ejecutar un contenedor de brazo en un host con arquitectura x86-64
Puedo ver que agrega el comando command: [/app/helloworld.py] al archivo yaml.
por lo que necesita (en Dockerfile):
RUN chmod +x /app/helloworld.py establece shebang en tu archivo py :
#!/usr/bin/env python # whatever your defualt python to run the script o configure el comando de la misma manera que lo hizo en Dockerfile
Recientemente me encontré con el problema al ejecutar un contenedor logstash
standard_init_linux.go:211: el proceso de usuario exec provocó un "error de formato exec"
Notó que la línea shebang (#!/bin/sh) en entrypoint.sh se escribió en la segunda línea en lugar de en la primera línea del archivo entrypoint.sh.
Cuando la línea shebang se hace como la primera línea en el script, el error desapareció y "docker run -it logstashimage:latest sh" funcionó perfectamente.
Otras dos razones podrían plantear este problema si ejecuta Docker en Windows :