首页 > 解决方案 > Jenkins Dockerfile 构建:[91mstandard_init_linux.go:211:exec 用户进程导致“exec 格式错误”

问题描述

我一直在尝试为树莓派 3 上的 python 项目创建基本的 ci/cd 管道。我正在使用 Jenkins 构建 Docker 映像并将其推送到我的 Dockerhub 存储库,但在 Jenkins 构建期间出现错误:

[91mstandard_init_linux.go:211: exec user process caused "exec format error"

我的 Dockerfile 如下

FROM arm32v7/python:3.7-slim-buster

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "./main.py" ]

问题出现在RUN pip install命令中,所以我认为 Jenkins 工作人员可能无法访问该文件。所以我添加了一个额外的命令来更改权限:

FROM arm32v7/python:3.7-slim-buster

WORKDIR /usr/src/app
RUN chmod u=rwx,g=rx,o=rx requirements.txt
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "./main.py" ]

Jenkins 构建失败并在chmod命令上出现相同的错误,并且它似乎根本无法运行任何 /bin 脚本,因为所有 /bin/sh 命令都失败了。我想可能是因为 Jenkins 无法应用某些命令,因为我在 armv732 中指定了构建?我目前正在运行 Ubuntu 的机器的本地主机上运行 Jenkins。我对 Jenkins 和 Docker 都很陌生,所以我不熟悉系统如何工作的细节。任何帮助将非常感激。

Jenkins 生成的日志:


Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/jenkins-test-docker
using credential 719f731b-6c8d-4712-aa71-d9c221c23a9c
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url https://github.com/CoogyEoin/ev_mqtt_monitor.git # timeout=10
Fetching upstream changes from https://github.com/CoogyEoin/ev_mqtt_monitor.git
 > git --version # timeout=10
using GIT_ASKPASS to set credentials 
 > git fetch --tags --progress -- https://github.com/CoogyEoin/ev_mqtt_monitor.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git rev-parse refs/remotes/origin/testBranch^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/testBranch^{commit} # timeout=10
Checking out Revision b4d0ed413636fd076e5fae1518062f0ae479fea7 (refs/remotes/origin/testBranch)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f b4d0ed413636fd076e5fae1518062f0ae479fea7 # timeout=10
Commit message: "Seeing if chmod works"
 > git rev-list --no-walk 7be754300f5003e54139b34a8f3dff7eecc4f5bf # timeout=10
[jenkins-test-docker] $ docker build -t coogy/ev_mqtt_monitor_test --pull=true /var/lib/jenkins/workspace/jenkins-test-docker
Sending build context to Docker daemon  216.1kB

Step 1/7 : FROM arm32v7/python:3.7-slim-buster
3.7-slim-buster: Pulling from arm32v7/python
Digest: sha256:0b115cbcf0c0a8164b2e486458af66418c78899a375750b9469c609c82c2cf36
Status: Image is up to date for arm32v7/python:3.7-slim-buster
 ---> 9a0c8b2b71f6
Step 2/7 : WORKDIR /usr/src/app
 ---> Using cache
 ---> 6f702979c25d
Step 3/7 : RUN chmod u=rwx,g=rx,o=rx requirements.txt
 ---> Running in c6a005a76880
[91mstandard_init_linux.go:211: exec user process caused "exec format error"
[0mThe command '/bin/sh -c chmod u=rwx,g=rx,o=rx requirements.txt' returned a non-zero code: 1
Build step 'Docker Build and Publish' marked build as failure
Finished: FAILURE

标签: pythonlinuxgitdockerjenkins

解决方案


您收到的错误表明该二进制文件是为 CPU 架构构建的,而不是您在 Jenkins 中用作构建从属的那个。Dockerfile 中的大多数命令都是在基于 Dockerfile 中指定的映像的容器内执行的,因此架构必须匹配。


推荐阅读