Mar*_*ick 50 python linux bash docker
docker开始抛出此错误:
standard_init_linux.go:178:exec用户进程导致"exec格式错误"
每当我使用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 \
tcl \
tk \
&& 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 \
&& buildDeps=' \
tcl-dev \
tk-dev \
' \
&& apt-get update && apt-get install -y $buildDeps --no-install-recommends && rm -rf /var/lib/apt/lists/* \
\
&& wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" \
&& wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY" \
&& gpg --batch --verify python.tar.xz.asc python.tar.xz \
&& rm -r "$GNUPGHOME" python.tar.xz.asc \
&& mkdir -p /usr/src/python \
&& tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz \
&& rm python.tar.xz \
\
&& cd /usr/src/python \
&& ./configure \
--enable-loadable-sqlite-extensions \
--enable-shared \
&& make -j$(nproc) \
&& make install \
&& ldconfig \
\
&& if [ ! -e /usr/local/bin/pip3 ]; then : \
&& wget -O /tmp/get-pip.py 'https://bootstrap.pypa.io/get-pip.py' \
&& python3 /tmp/get-pip.py "pip==$PYTHON_PIP_VERSION" \
&& rm /tmp/get-pip.py \
; fi \
&& pip3 install --no-cache-dir --upgrade --force-reinstall "pip==$PYTHON_PIP_VERSION" \
&& [ "$(pip list |tac|tac| awk -F '[ ()]+' '$1 == "pip" { print $2; exit }')" = "$PYTHON_PIP_VERSION" ] \
\
&& find /usr/local -depth \
\( \
\( -type d -a -name test -o -name tests \) \
-o \
\( -type f -a -name '*.pyc' -o -name '*.pyo' \) \
\) -exec rm -rf '{}' + \
&& apt-get purge -y --auto-remove $buildDeps \
&& rm -rf /usr/src/python ~/.cache
RUN cd /usr/local/bin \
&& { [ -e easy_install ] || ln -s easy_install-* easy_install; } \
&& ln -s idle3 idle \
&& ln -s pydoc3 pydoc \
&& ln -s python3 python \
&& 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"]
Run Code Online (Sandbox Code Playgroud)
rbe*_*nto 237
如果映像是在带有Apple M1 Pro芯片(基于 ARM)的MacBook Pro上构建的,也可能会发生此错误,因此默认情况下 Docker 构建命令的目标是.arm64
Docker 实际上将 Apple M1 Pro 平台检测为linux/arm64/v8
为构建命令和版本标记指定平台就足够了:
# Build for ARM64 (default)
docker build -t <image-name>:<version>-arm64 .
# Build for ARM64
docker build --platform=linux/arm64 -t <image-name>:<version>-arm64 .
# Build for AMD64
docker build --platform=linux/amd64 -t <image-name>:<version>-amd64 .
Run Code Online (Sandbox Code Playgroud)
环境
芯片:Apple M1 Pro,10 个核心(8 个性能和 2 个效率)
Docker 版本 20.10.12,内部版本 e91ed57
Mar*_*ick 130
我忘记了
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
在sh文件的顶部,问题解决了.
Rya*_*yan 86
如果 Docker 映像构建在 M1 芯片上并上传以由 Fargate 部署,那么您\xe2\x80\x99 会注意到 Fargate 中的此容器错误:
\nstandard_init_linux.go:228: exec user process caused: exec format error\nRun Code Online (Sandbox Code Playgroud)\n有几种方法可以解决这个问题。您可以:
\ndocker buildx build --platform=linux/amd64 -t image-name:version .\nRun Code Online (Sandbox Code Playgroud)\nFROM --platform=linux/amd64 BASE_IMAGE:VERSION\nRun Code Online (Sandbox Code Playgroud)\n
Ale*_*eph 72
如果您尝试在 arm64/aarch64 机器上运行 x86 构建的映像,就会发生这种情况。
您需要使用相应的架构重建映像
kse*_*ley 28
如果您在 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>.
rv.*_*tch 17
我目前正在使用 M1 Mac,早些时候我也遇到过这个问题。实际上,我意识到我作为堆栈的一部分部署的 Fargate 任务已经一个多月没有运行了,因为我将它部署在我的 M1 Mac 笔记本电脑上。部署脚本在我的旧的基于 Intel 的 Mac 上运行良好。
我刚刚在 CW 日志中注意到的错误(任务又失败了一个多月)如下:
standard_init_linux.go:228: exec user process caused: exec format error
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,在所有docker build步骤中——因为我有一个用于构建 lambda 层,另一个用于构建 Fargate 任务——我刚刚更新以添加--platform=linux/amd64. 请注意,如果我在参数后添加标签-t,例如像img-test:0.1-amd64. 我想知道这是否可能是因为我:latest稍后在脚本中引用了该标签。
无论如何,这些都是必要的改变。你会注意到,我真正所做的只是添加了--platform参数;其他一切都保持不变。
ecr_repository="some/app"
docker build -t ${ecr_repository} \
--platform=linux/amd64 \
--build-arg SOME_ARG='value' \
.
Run Code Online (Sandbox Code Playgroud)
我不确定技术上是否需要,但为了安全起见,我还更新了FROM我的 s 中的所有声明Dockerfile:
FROM --platform=linux/amd64 ubuntu:<version>
Run Code Online (Sandbox Code Playgroud)
rai*_*op3 12
添加此代码
#!/usr/bin/env bash
Run Code Online (Sandbox Code Playgroud)
在脚本文件的顶部。
遇到同样的错误,我在更改为 AMD 后正在构建 ARM 映像。问题已解决
该错误通常意味着您正在尝试在非 amd64 主机(例如 32 位或 ARM)上运行此 amd64 映像。
使用buildx并指定 --platfom linux/amd64尝试构建
示例命令
docker buildx build -t ranjithkumarmv/node-12.13.0-awscli . --platform linux/amd64
Run Code Online (Sandbox Code Playgroud)
小智 5
对于那些尝试在 amd64 Linux 系统上构建 aarch64 或 armv7l 架构的映像并遇到相同错误的人:检查是否qemu-user-static安装了软件包。sudo apt install qemu-user-static如果没有,请在 Ubuntu/Debian/Mint 等上安装,或者在sudo dnf install qemu-user-staticFedora 上安装
| 归档时间: |
|
| 查看次数: |
32981 次 |
| 最近记录: |