当前位置:   article > 正文

aarch64CPU架构部署docker相关采坑记 cannot execute binary file exec user process caused: exec format error_-bash: /usr/local/bin/docker-compose: cannot execu

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

一、安装docker

在这里插入图片描述

一键安装docker

curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh
  • 1
  • 2

接下来安装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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

若是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
  • 1
  • 2
  • 3
  • 4
  • 5

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
  • 1
  • 2
  • 3

3、yum安装

yum install  docker-compose
  • 1

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

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

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

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

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

二、安装docker-compose

环境准备:

安装wget和openjdk。

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

安装Python 3.6。

yum install python36 -y
  • 1

安装docker。

yum install docker
  • 1

启动docker。

systemctl start docker
  • 1

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

docker --version
  • 1

安装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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

三、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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/157088?site
推荐阅读
相关标签
  

闽ICP备14008679号