栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

standard

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

standard

standard_init_linux.go:207: exec user process caused "exec format error"
  • 发生错误的情景
  • 错误原因
  • 解决方式
    • 1.在需要运行的机器上重新制作image
    • 2.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

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

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

  1. 创建构建器
$ docker buildx create --use --name mybuilder
  1. 启动构建器
$ 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

  1. 查看目前构建器支持的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

  1. 构建指定CPU架构能够使用的image
    (参数–platform后面为需要构建的平台)
$ docker buildx build -t myimages --platform=linux/arm64 .
  1. 完工。第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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/905817.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号