M2 Mac部署Grid DB时Docker Compose架构不匹配错误求助
我使用M2 Mac OS,运行docker compose up -d时遇到架构不匹配错误。我的docker-compose.yml包含GridDB、Kafka、Zookeeper和Jupyter服务,其中Griddb-server的配置片段如下:
version: '3' volumes: griddb: services: griddb-server: build: context: griddb-server dockerfile: Dockerfile container_name: griddb-server user: root expose: - '10001' - '10010' - '10020' - '10040' - '20001' - '41999' environment: NOTIFICATION_MEMBER: 1 GRIDDB_CLUSTER_NAME: myCluster
构建griddb-server镜像的Dockerfile内容如下:
FROM griddb/griddb USER root RUN set -eux \ && apt-get update \ && apt-get install -y default-jre --no-install-recommends \ && apt-get clean all \ && rm -rf /var/lib/apt/lists/* # Install GridDB c_client WORKDIR / RUN wget --no-check-certificate https://github.com/griddb/c_client/releases/download/v5.0.0/griddb-c-client_5.0.0_amd64.deb RUN dpkg -i griddb-c-client_5.0.0_amd64.deb RUN wget --no-check-certificate https://github.com/griddb/cli/releases/download/v5.0.0/griddb-ce-cli_5.0.0_amd64.deb RUN dpkg -i griddb-ce-cli_5.0.0_amd64.deb ADD start-griddb2.sh / USER gsadm ENTRYPOINT ["/bin/bash", "/start-griddb2.sh"] CMD ["griddb"]
运行命令时触发的错误:
ERROR [iot_project-main-data-viz 3/12] RUN dpkg -i griddb-c-client_5.0.0_amd64.deb 0.2s
CANCELED [iot_project-main-jupyter 2/6] RUN wget --no-check-certificate https://github.com/griddb/c_client/releases/download/v5.0.0/griddb-c-client_5 0.0s[iot_project-main-data-viz 3/12] RUN dpkg -i griddb-c-client_5.0.0_amd64.deb:
#0 0.133 dpkg: error processing archive griddb-c-client_5.0.0_amd64.deb (--install):
#0 0.133 package architecture (amd64) does not match system (arm64)
#0 0.146 Errors were encountered while processing:
#0 0.146 griddb-c-client_5.0.0_amd64.deb
我原本期望docker compose up能成功构建镜像,但实际因软件包架构(amd64)与系统(arm64)不匹配导致dpkg报错,进程终止。请问是否有办法修改docker-compose.yml解决该问题,或者是否有ARM64架构的GridDB C Client下载地址?
方案1:强制以amd64架构构建运行镜像
在M系列Mac上,Docker支持通过指定平台参数,用QEMU模拟amd64环境来构建和运行镜像。修改docker-compose.yml中的griddb-server配置,添加platform参数:
services: griddb-server: build: context: griddb-server dockerfile: Dockerfile platform: linux/amd64 # 构建时指定amd64架构 container_name: griddb-server platform: linux/amd64 # 运行容器时指定amd64架构 user: root expose: - '10001' - '10010' - '10020' - '10040' - '20001' - '41999' environment: NOTIFICATION_MEMBER: 1 GRIDDB_CLUSTER_NAME: myCluster
此方法无需修改Dockerfile,直接通过docker-compose配置即可兼容,但镜像运行时会有轻微性能损耗。
方案2:使用ARM64原生版本的GridDB包
GridDB从v5.3.0及以上版本开始提供ARM64架构的预编译deb包。你可以修改Dockerfile中的下载链接,替换为对应ARM64版本的包:
# 替换为ARM64版本的C Client RUN wget --no-check-certificate [ARM64版本griddb-c-client的下载地址] RUN dpkg -i griddb-c-client_<版本号>_arm64.deb # 替换为ARM64版本的CLI RUN wget --no-check-certificate [ARM64版本griddb-ce-cli的下载地址] RUN dpkg -i griddb-ce-cli_<版本号>_arm64.deb
如果必须使用v5.0.0版本,该版本未提供官方ARM64预编译包,需要自行从源码编译C Client和CLI。
内容的提问来源于stack exchange,提问作者ogbeks

