standard_init_linux.go:178:执行用户进程导致“执行格式错误”

2025-04-15 09:20:00
admin
原创
28
摘要:问题描述:docker 开始抛出这个错误:standard_init_linux.go:178:执行用户进程导致“执行格式错误”每当我使用 CMD 或 ENTRYPOINT 运行特定的 docker 容器时,除了删除 CMD 或 ENTRYPOINT 之外,不考虑对文件进行任何更改。这是我一直在使用的 doc...

问题描述:

docker 开始抛出这个错误:

standard_init_linux.go:178:执行用户进程导致“执行格式错误”

每当我使用 CMD 或 ENTRYPOINT 运行特定的 docker 容器时,除了删除 CMD 或 ENTRYPOINT 之外,不考虑对文件进行任何更改。这是我一直在使用的 docker 文件,它在大约一小时前一直运行良好:

FROM buildpack-deps:jessie

ENV PATH /usr/local/bin:$PATH

ENV LANG C.UTF-8

RUN apt-get update && apt-get install -y --no-install-recommends \n        tcl \n        tk \n    && rm -rf /var/lib/apt/lists/*

ENV GPG_KEY 0D96DF4D4110E5C43FBFB17F2D347EA6AA65421D
ENV PYTHON_VERSION 3.6.0

ENV PYTHON_PIP_VERSION 9.0.1

RUN set -ex \n    && buildDeps=' \n        tcl-dev \n        tk-dev \n    ' \n    && apt-get update && apt-get install -y $buildDeps --no-install-recommends && rm -rf /var/lib/apt/lists/* \n    \n    && wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" \n    && wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" \n    && export GNUPGHOME="$(mktemp -d)" \n    && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY" \n    && gpg --batch --verify python.tar.xz.asc python.tar.xz \n    && rm -r "$GNUPGHOME" python.tar.xz.asc \n    && mkdir -p /usr/src/python \n    && tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz \n    && rm python.tar.xz \n    \n    && cd /usr/src/python \n    && ./configure \n        --enable-loadable-sqlite-extensions \n        --enable-shared \n    && make -j$(nproc) \n    && make install \n    && ldconfig \n    \n    && if [ ! -e /usr/local/bin/pip3 ]; then : \n        && wget -O /tmp/get-pip.py 'https://bootstrap.pypa.io/get-pip.py' \n        && python3 /tmp/get-pip.py "pip==$PYTHON_PIP_VERSION" \n        && rm /tmp/get-pip.py \n    ; fi \n    && pip3 install --no-cache-dir --upgrade --force-reinstall "pip==$PYTHON_PIP_VERSION" \n    && [ "$(pip list |tac|tac| awk -F '[ ()]+' '$1 == "pip" { print $2; exit }')" = "$PYTHON_PIP_VERSION" ] \n    \n    && find /usr/local -depth \n        ( \n            ( -type d -a -name test -o -name tests ) \n            -o \n            ( -type f -a -name '*.pyc' -o -name '*.pyo' ) \n        ) -exec rm -rf '{}' + \n    && apt-get purge -y --auto-remove $buildDeps \n    && rm -rf /usr/src/python ~/.cache

RUN cd /usr/local/bin \n    && { [ -e easy_install ] || ln -s easy_install-* easy_install; } \n    && ln -s idle3 idle \n    && ln -s pydoc3 pydoc \n    && ln -s python3 python \n    && ln -s python3-config python-config

RUN pip install uwsgi

RUN mkdir /config

RUN mkdir /logs

ENV HOME /var/www

WORKDIR /config

ADD conf/requirements.txt /config

RUN pip install -r /config/requirements.txt

ADD conf/wsgi.py /config

ADD conf/wsgi.ini /config

ADD conf/__init__.py /config

ADD start.sh /bin/start.sh

RUN chmod +x /bin/start.sh

EXPOSE 8000

ENTRYPOINT ["start.sh", "uwsgi", "--ini", "wsgi.ini"]

解决方案 1:

我忘了放

#!/bin/bash

在 sh 文件的顶部,问题解决了。

解决方案 2:

如果您尝试在 arm64/aarch64 机器上运行 x86 构建的图像,则可能会发生这种情况。

您需要使用相应的架构重建图像

解决方案 3:

如果在配备基于 ARM 的Apple M1 Pro芯片的MacBook Pro上构建映像,也可能会出现此错误,因此默认情况下 Docker 构建命令以 为目标。arm64

Docker 实际上将 Apple M1 Pro 平台检测为linux/arm64/v8

指定构建命令的目标平台,并可选择在版本标签中添加方便的后缀,如下所示:

构建图像

为 ARM64 构建(默认)
docker build -t <image-name>:<version>-arm64 .
针对 ARM64 构建
docker build --platform=linux/arm64 -t <image-name>:<version>-arm64 .
为 AMD64 构建
docker build --platform=linux/amd64 -t <image-name>:<version>-amd64 .

使用图像

针对 ARM64
FROM --platform=linux/arm64 <image>:<tag>
针对 AMD64
FROM --platform=linux/amd64 <image>:<tag>

环境

芯片:Apple M1 Pro,10 核(8 核性能,2 核效率)

Docker 版本 20.10.12,构建版本 e91ed57

解决方案 4:

添加此代码

#!/usr/bin/env bash

在脚本文件的顶部。

解决方案 5:

如果 Docker 镜像是在 M1 芯片上构建的,并上传以供 Fargate 部署,那么您会注意到 Fargate 中的此容器错误:

standard_init_linux.go:228: exec user process caused: exec format error

有几种方法可以解决这个问题。您可以:

  • 使用以下方式构建你的 docker 镜像:

docker buildx build --platform=linux/amd64 -t image-name:version .
  • 使用以下语句更新 Dockerfile 的 FROM 语句

FROM --platform=linux/amd64 BASE_IMAGE:VERSION

解决方案 6:

换成 AMD 架构后,我构建 ARM 镜像时也遇到了同样的错误。问题已解决

该错误通常意味着您尝试在非 amd64 主机(例如 32 位或 ARM)上运行此 amd64 映像。

尝试使用buildx并指定 --platform linux/amd64进行构建

示例命令

docker buildx  build -t ranjithkumarmv/node-12.13.0-awscli . --platform linux/amd64

解决方案 7:

如果您在 AWS ECS 中收到此信息,则可能是使用 Apple M1 Pro 芯片构建的镜像。您可以在 Dockerfile 中添加以下内容:
FROM --platform=linux/amd64 <image>:<tag>

如果您正在使用子图像,例如:FROM <parent_image_you_created>:<tag>您需要确保<parent_image_you_created>:<tag>是使用构建的FROM --platform=linux/amd64 <image>:<tag>

解决方案 8:

我目前使用的是 M1 Mac,之前也遇到过这个问题。实际上,我发现一个作为堆栈一部分部署的 Fargate 任务已经一个多月没有运行了,因为我把它部署在了我的 M1 Mac 笔记本电脑上。部署脚本在我之前的 Intel Mac 上运行良好。

我刚刚在 CW 日志中注意到的错误(该任务再次失败了一个多月)正是如下内容:

standard_init_linux.go:228: exec user process caused: exec format error

为了解决这个问题,在所有docker build步骤中——因为我有一个用于构建lambda层,另一个用于构建Fargate任务——我只需更新以添加。请注意,如果我在参数后添加标签,例如像,--platform=linux/amd64它对我来说不起作用。我想知道这是否可能是因为我稍后在脚本中引用了该标签。-t`img-test:0.1-amd64`:latest

无论如何,这些都是必要的改变。你会注意到,我实际上只是添加了--platform参数;其他一切都保持不变。

ecr_repository="some/app"

docker build -t ${ecr_repository} \n        --platform=linux/amd64 \n        --build-arg SOME_ARG='value' \n        .

而且我不确定这在技术上是否是必需的,但为了安全起见,我还更新了FROM我的Dockerfiles 中的所有语句:

FROM --platform=linux/amd64 ubuntu:<version>

解决方案 9:

另一个可能的原因是文件保存时使用了 Windows 行尾 (CRLF)。使用 Unix 行尾 (LF) 保存即可找到该文件。

解决方案 10:

扩展到可接受的答案:

对于alpine(无 bash)图像:

#!/bin/ash

在 sh 文件的顶部,解决了该问题。

解决方案 11:

如果您尝试在 amd64 Linux 系统上为 aarch64 或 armv7l 架构构建镜像并遇到相同的错误:请检查软件包是否已安装。如果没有,请在 Ubuntu/Debian/Mint 等系统上qemu-user-static安装,或在 Fedora 上安装sudo apt install qemu-user-static`sudo dnf install qemu-user-static`

解决方案 12:

这些对我都没用。为什么没人提BOM?

如果文件开头有字节顺序标记,就会发生此错误。

您可以使用以下方式检查:

head -n 1 yourscript | LC_ALL=C od -tc

在 Notepad++ 中,您可以通过在编码菜单中选择适当的选项,将文本保存为不带 BOM 的 UTF-8 格式:

编码 > UTF-8

解决方案 13:

我在 RHEL 7.3 和 docker 17.05-ce 上运行离线加载的镜像时也遇到了同样的问题。RHEL/CentOS 的默认存储驱动程序似乎从device-mapper更改为 overlay。将驱动程序恢复为 devicemapper 后问题得到了解决。

dockerd --storage-driver=devicemapper

或者

/etc/docker/daemon.json
{
  "storage-driver": "devicemapper"
}

解决方案 14:

还有一种可能性是 #!/bin/bash 不在第一行。它前面肯定什么也没有(没有空行,什么也没有)。

解决方案 15:

这不是对问题的直接回答。虽然我在调用“docker-compose up”启动我的nodejs应用程序时遇到了错误。后来我意识到我的“Dockerfile”里有CMD ["./server.js"]……

为了解决CMD ["npm","start"]这个问题,我将其替换为,问题就解决了。希望如果有人遇到这个异常,这篇文章能有所帮助。

解决方案 16:

standard_init_linux.go:228: exec user process caused: exec format error`main`对我来说,这是因为我的 Go 项目中
没有包。希望这能帮到大家。

解决方案 17:

如果您已安装 buildx 但仍然遇到此错误,则可能是因为缺少跨平台模拟器。

这些可以像这样安装:

docker run --privileged --rm tonistiigi/binfmt --install all

资料来源:https://docs.docker.com/build/building/multi-platform/#building-multi-platform-images

当我尝试linux/arm64通过在具有平台的 Gitlab 运行器上运行的 Gitlab 管道构建图像时发生了这种情况linux/amd64

解决方案 18:

就我而言,我“耗尽”了我的 ECS 实例并再次“激活”它们,此后错误就消失了。

解决方案 19:

如果您使用运行容器的 IBR1700 路由器,则在使用命令container logs test(其中 test 是容器的名称)后在路由器命令行中可能会出现类似的错误。

要解决此问题,您需要构建应用程序,使其能够在其他平台上运行。它使用 linux/arm/v7。

docker run -it --rm --privileged docker/binfmt:a7996909642ee92942dcd6cff44b9b95f08dad64
docker buildx create --name mybuilder
docker buildx use mybuilder
docker buildx build --platform linux/arm/v7 --no-cache -t <username/repository>:<tag> . --push

使用此构建推送到存储库意味着它可以在路由器上运行。

https://github.com/cradlepoint/container-samples

解决方案 20:

我的 ECS 集群是 arm64 架构,但我的 docker 镜像显示的是 amd64 架构。我重建了我的 docker 镜像:https://docs.docker.com/desktop/multi-arch/

解决方案 21:

我遇到过类似的问题standard_init_linux.go:228: exec user process caused: exec format error,但这些答案都没什么帮助。最终我发现是老版本的 Docker导致的17.09.0-ce,而且 Circle CI 默认的版本也是老版本,所以只要换到最新版本,问题就解决了。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2482  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1533  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   0  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   0  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用