离线升级docker-compose到2.37.2后,执行docker-compose --version报cannot execute binary file: Exec format error

       docker-compose 是 Docker 提供的一个工具,用于定义和运行 多容器 Docker 应用程序。它通过一个 YAML 文件(通常是 docker-compose.yml)来配置应用程序所需的所有服务、网络、卷、环境变量等资源,并通过简单的命令即可启动、停止、重建整个应用环境。

一.现象

将docker-compose升级到2.37.2,执行docker-compose --version报

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

二.原因

安装的docker-compose版本不对。通过uname -m查看系统架构,发现需要x86-64架构。在

https://github.com/docker/compose/releases里面没有对应的linux x86-64架构,因此通过代码来生成。

离线升级docker-compose到2.37.2后,执行docker-compose --version报cannot execute binary file: Exec format error_第1张图片

docker-compose-darwin-x86_64:
这个版本是为运行在 x86_64 架构上的 Darwin(macOS 的内核)系统设计的。
它适用于基于 Intel 或者 AMD CPU 的 macOS 系统。
docker-compose-linux-aarch64:
该版本是为 aarch64 架构(也称为 ARM64)的 Linux 系统设计的。
它适用于如 Raspberry Pi 4、AWS Graviton 实例等基于 ARM 处理器的设备上运行的 Linux 发行版。
docker-compose-darwin-aarch64:
此版本专为 aarch64 架构的 Darwin 系统设计。
随着 Apple 推出 M1 芯片及其后续产品(基于 ARM 架构),这个版本的 Docker Compose 主要用于这些新架构的 macOS 设备。

三.解决方案

1.从https://github.com/docker/compose/releases对应版本的下载源代码;

本次下载compose-2.37.2.tar.gz

2.解压compose-2.37.2.tar.gz

tar -zxvf compose-2.37.2.tar.gz

3.进入compose-2.37.2

执行make VERSION=2.37.2

注:如果make后面不加VERSION=2.37.2,在执行docker compose version,看不到对应版本,如下图

4.将docker-compose拷贝到/usr/local/lib/docker/cli-plugins/目下,通过which docker-compose
可查看原来的位置。

cp /app/tools/docker/compose-2.37.2/bin/build/docker-compose  /usr/local/lib/docker/cli-plugins/
 

再输入yes,如下图:

5.执行docker compose  version进行版本验证,输出Docker Compose version 2.37.2

四.其他

通过代码生成docker-compose,需要go语言环境且go版本需要1.23.8及以上,否则会报。

如何离线安装go的环境,下次再写。

通过go version查看版本。

1. 基本命令
up
启动所有定义在 docker-compose.yml 文件中的服务,并在它们之间创建网络和卷。
使用 -d 参数可以在后台运行服务:docker-compose up -d
down
停止并删除由 docker-compose up 创建的所有容器、网络、卷以及镜像(仅限于那些没有被其他容器使用的)。
start
启动已存在但当前未运行的服务。
stop
停止正在运行的服务,但不移除它们。
restart
重启服务。
build
构建或重新构建服务。如果你的服务定义中指定了构建上下文,则此命令将执行构建操作。
ps
列出由 docker-compose.yml 定义的所有服务的状态。
2. 日志相关
logs
查看服务的日志输出。可以添加 -f 参数以实时查看日志更新。
logs [service_name]
查看特定服务的日志输出。
3. 扩展与执行
scale
设置指定服务的实例数量。例如,docker-compose scale web=2 worker=5 将启动两个 web 实例和五个 worker 实例。
run
在服务容器内运行一次性命令。这对于调试很有用。例如,docker-compose run db bash 将在数据库服务容器中打开一个 Bash shell。
4. 其他实用命令
config
验证并查看 docker-compose.yml 文件的有效配置。
exec
在运行中的容器内部执行命令。例如,docker-compose exec web curl http://localhost 可以在名为 web 的服务容器中执行 curl 命令。
port
打印特定服务的公共端口到私有端口的映射。例如,docker-compose port web 80 将显示 web 服务的 80 端口是如何映射的。

你可能感兴趣的:(操作系统,docker,docker)