standard

standard,第1张

standard_init_linux.go:207: exec user process caused "exec format error" 发生错误的情景错误原因解决方式1.在需要运行的机器上重新制作image2.docker制作跨平台的image 衍生错误分享

发生错误的情景

docker容器启动失败,使用docker logs查看到的错误信息。

客户因为国产化需求,服务器从centOS换到了统信UOS,原本在centOS能正常运行的image,在统信UOS会发生如题错误。

错误原因

楼主查阅了大量的资料 确定了是CPU架构不同而造成的原因,之前centOS的CPU架构是x86,而统信UOS是arm64 ,如果各位遇到错误的情景和我一样,可以分别在两台机器上直接使用"uname -m"指令进行查看,如果错误的原因和我一样,可以继续往下阅读。但如果查看出来两台机器的CPU架构一样,以下解决方式可能无法解决你的问题。

解决方式 1.在需要运行的机器上重新制作image

这种方式比较简单,使用docker build在对应的cpu架构平台的机器上直接产生新的image即可

2.docker制作跨平台的image

因楼主的客户是国有企业特别注重安全,所以服务器也都是层层加密且无外网,导致无法在arm64的机器上面产生新的image 并且身边也找不到该CPU架构的机器,最终使用了buildx来制作

楼主的开发环境如下:

macOS : 10.15.7
docker : 20.10.7

使用如下命令 设置环境变量 DOCKER_CLI_EXPERIMENTAL 来启用buildx插件
$ export DOCKER_CLI_EXPERIMENTAL=enabled
查看版本信息,成功返回则表示启动成功
$ docker buildx version

github.com/docker/buildx v0.5.1-docker 11057da37336192bfc57d81e02359ba7ba848e4a

创建构建器
$ docker buildx create --use --name mybuilder
启动构建器
$ docker buildx inspect mybuilder --bootstrap

Name: mybuilder
Driver: docker-container
Nodes:
Name: mybuilder0
Endpoint: unix:///var/run/docker.sock
Status: running
Platforms: linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

查看目前构建器支持的CPU架构
$  docker buildx ls

NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS
mybuilder * docker-container
mybuilder0 unix:///var/run/docker.sock running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
desktop-linux docker
desktop-linux desktop-linux running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
default docker
default default running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

构建指定CPU架构能够使用的image
(参数–platform后面为需要构建的平台)
$ docker buildx build -t myimages --platform=linux/arm64 .
完工。第7步如有遇到错误 ,基本都是DockerFile的原因。
或者build完成后使用docker images看不到新产生的images可以仔细看看日志有没有如下警告,根据警告提示加上参数重新执行第7步的 *** 作即可

WARN[0000] No output specified for docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load

衍生错误分享

如上第7步build image有遇到错误的同学,可以参考一下楼主错误和解决方式。
因为刚好遇到的错误也与文章的主体原因相关, Dockfile如下:

FROM python:3.6
WORKDIR /usr/src/app
COPY ./src .
COPY requirements.txt ./
RUN pip install --upgrade pip setuptools==45.2.0
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.douban.com/simple
RUN pip install ./numpy-1.14.2-cp36-cp36m-manylinux1_x86_64.whl
RUN pip install ./pandas-0.22.0-cp36-cp36m-manylinux1_x86_64.whl
EXPOSE 5000
ENTRYPOINT ["python","./app.py"]

因为有使用到python的一些计算库numpy、pandas
解决方式:找到arm64能够使用的.whl文件替换即可
numpy-xxx.x86_64.whl -> numpy-xxx.aarch64.whl
pandas-xxx.x86_64.whl -> pandas-xxx.aarch64.whl

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/994797.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存