如何解决Docker拉取zookeeper:3.5.5时的manifest不匹配问题?
解决Docker在Apple Silicon(M1/M2)上拉取zookeeper:3.5.5失败的问题
核心问题修正:命令参数位置错误
你之前的命令中--platform linux/x86_64的位置错误,它是Docker的全局选项,需要放在镜像名称之前,而非作为容器启动命令传递。正确命令如下:
docker run -it --rm --name zookeeper --platform linux/x86_64 -p 2181:2181 -p 2888:2888 -p 3888:3888 zookeeper:3.5.5
备选方案1:使用支持ARM64架构的ZooKeeper版本
zookeeper 3.6及后续版本已提供ARM64原生镜像,无需架构模拟,直接运行:
docker run -it --rm --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 zookeeper:3.6.3
此方案无模拟开销,性能更优。
备选方案2:开启Docker Desktop的Rosetta模拟
若必须使用3.5.5版本,先确保Docker Desktop开启Rosetta支持:
- 打开Docker Desktop偏好设置
- 进入
Features in development选项卡 - 勾选
Use Rosetta for x86/amd64 emulation on Apple Silicon - 重启Docker Desktop后执行修正后的命令
备选方案3:本地构建ARM64版本的zookeeper:3.5.5镜像
若以上方法均无效,可手动构建镜像:
- 创建
Dockerfile文件,内容如下:
FROM openjdk:8-jdk-arm64 ENV ZOO_VERSION=3.5.5 ENV ZOO_HOME=/opt/zookeeper-$ZOO_VERSION RUN apt-get update && apt-get install -y wget && \ wget https://archive.apache.org/dist/zookeeper/zookeeper-$ZOO_VERSION/apache-zookeeper-$ZOO_VERSION-bin.tar.gz && \ tar -xzf apache-zookeeper-$ZOO_VERSION-bin.tar.gz -C /opt && \ rm apache-zookeeper-$ZOO_VERSION-bin.tar.gz WORKDIR $ZOO_HOME EXPOSE 2181 2888 3888 CMD ["bin/zkServer.sh", "start-foreground"]
- 在Dockerfile所在目录执行构建命令:
docker build -t zookeeper:3.5.5 .
- 构建完成后直接运行原有启动命令即可
内容的提问来源于stack exchange,提问作者Jeff Cook
相关产品推荐
相关产品推荐

