aarch64CPU架构部署docker相关采坑记 cannot execute binary file exec user process caused: exec format error

一、安装docker

在这里插入图片描述

一键安装docker

curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh

接下来安装docker-compose,三种方式进行安装

1、二进制安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 添加快捷启动连接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 测试安装结果
docker-compose --version

若是github访问太慢,可以用daocloud下载

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 测试安装结果
docker-compose --version

2、pip3安装

yum install -y libffi libffi-devel openssl-devel python3 python3-pip python3-devel

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple docker-compose

3、yum安装

yum install  docker-compose

但是发现存在2种错误如下:

-bash: /usr/local/bin/docker-compose: cannot execute binary file

采用docker pull 进行启动错误如下:

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

那么只有采取终极安装方式。

二、安装docker-compose

环境准备:

安装wget和openjdk。

yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel wget -y

安装Python 3.6。

yum install python36 -y

安装docker。

yum install docker

启动docker。

systemctl start docker

检查docker是否安装成功,显示如下表示安装成功。

docker --version

安装docker-compose

cd /usr/local/src

git clone https://github.com/ubiquiti/docker-compose-aarch64.git

安装
进入docker-compose源文件目录。
cd /usr/local/src/docker-compose-aarch64

配置Dockerfile。
vi Dockerfile

注释掉RUN [ "cross-build-start" ],即在之前加入‘#’后保存退出。

# Dockerfile to build docker-compose for aarch64
FROM arm64v8/python:3.6.5-stretch

# Add env
ENV LANG C.UTF-8

# Enable cross-build for aarch64
COPY ./vendor/qemu-bin /usr/bin/
#RUN [ "cross-build-start" ]

安装docker-compose。
cd /usr/local/src/docker-compose-aarch64

docker build . -t docker-compose-aarch64-builder

运行和验证
运行docker-compose容器。
docker run docker-compose-aarch64-builder

找到生成的“docker-compose”可执行程序。
find / -name "docker-compose-Linux-aarch64"

[root@ecs-teukh-1 docker-compose-aarch64]# find / -name "docker-compose-Linux-aarch64"
/var/lib/docker/overlay2/1d8081e2d4b5958a1eccbaf76e949219c260d89236315b48cf0bfa95e076c1da/diff/build/dockercompose/docker-compose-Linux-aarch64
/var/lib/docker/overlay2/1d8081e2d4b5958a1eccbaf76e949219c260d89236315b48cf0bfa95e076c1da/diff/build/docker-compose-Linux-aarch64
/var/lib/docker/volumes/9d6624e6fc53d37221774fed9c64cf1a4ce64319a221e1069c70b4c88df7be40/_data/docker-compose-Linux-aarch64

可以看到有三个目录存放了生成的“docker-compose-Linux-aarch64”可执行程序。

进入任意一个目录。
cd /var/lib/docker/overlay2/1d8081e2d4b5958a1eccbaf76e949219c260d89236315b48cf0bfa95e076c1da/diff/build/dockercompose/

./docker-compose-Linux-aarch64 --version

[root@ecs-teukh-1 build]# ./docker-compose-Linux-aarch64 --version
docker-compose version 1.22.0, build e20d808e

创建快捷键
ln -s /var/lib/docker/volumes/9d6624e6fc53d37221774fed9c64cf1a4ce64319a221e1069c70b4c88df7be40/_data/docker-compose-Linux-aarch64  /usr/bin/docker-compose-Linux-aarch64

三、docker打包应用

您可以docker inspect 查看一下你所docker pull下来的镜像架构("Architecture"属性),一般出现这种问题,表示镜像架构与运行时架构不匹配导致的。

解决方法:

如果是从DockerHub或者Quay.io或者gcr之类的平台下载的时候,建议可以去查看一下是否有ARM64的镜像,详见下图所示,如果有的话,可以在docker pull时添加标识符的方式来告诉docker要下载哪一个镜像;

如果没有ARM64版本或者不是镜像源下载的镜像,可能需要从源码进行自行编译或者用ARM64版本进行容器镜像制作;

在这里插入图片描述
Java 服务的DockerFile

# FROM openjdk:11.0.10-jdk-oraclelinux7  使用arm64的jdk
FROM openjdk:8-jre-alpine 
ENV spring_profiles_active=dev
ENV env_java_debug_enabled=false
EXPOSE 8080
WORKDIR /app
ADD target/smcp-web.jar /app/target/smcp-web.jar
ADD run.sh /app
ENTRYPOINT ./run.sh

Maven Dockerfile

FROM openjdk:8-jdk

ARG MAVEN_VERSION=3.6.3
ARG USER_HOME_DIR="/root"
ARG SHA=c35a1803a6e70a126e80b2b3ae33eed961f83ed74d18fcd16909b2d44d7dada3203f1ffe726c17ef8dcca2dcaa9fca676987befeadc9b9f759967a8cb77181c0
ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries

RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
  && curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
  && echo "${SHA}  /tmp/apache-maven.tar.gz" | sha512sum -c - \
  && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
  && rm -f /tmp/apache-maven.tar.gz \
  && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn

ENV MAVEN_HOME /usr/share/maven
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"

COPY mvn-entrypoint.sh /usr/local/bin/mvn-entrypoint.sh
COPY settings-docker.xml /usr/share/maven/ref/

ENTRYPOINT ["/usr/local/bin/mvn-entrypoint.sh"]
CMD ["mvn"]

docker-compose-aarch64下载地址 并且修改为码云地址,github下载很慢:https://javaandjar.oss-cn-beijing.aliyuncs.com/docker-compose-aarch64.zip

参考:https://support.huaweicloud.com/prtg-kunpengmm/dockercompose_01_0001.html

参考:https://bbs.huaweicloud.com/blogs/227425

参考:https://bbs.huaweicloud.com/blogs/229355

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值