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来制作
楼主的开发环境如下:
使用如下命令 设置环境变量 DOCKER_CLI_EXPERIMENTAL 来启用buildx插件macOS : 10.15.7
docker : 20.10.7
$ 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
查看目前构建器支持的CPU架构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
$ docker buildx ls
构建指定CPU架构能够使用的imageNAME/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
(参数–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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)