当前热度比较高的kafka镜像是wurstmeister/kafka,在dockerhub上有很多的使用次数。我起初很开心最新版支持arm64架构,然后拉到本地用Mac M1跑也很完美

但是!我放到信创鲲鹏的生产环境,导入镜像没问题,但一用docker-compose启动就会报以下错误:

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

经过各种搜寻资料,大多说是镜像的架构不对,比如把x86的镜像放到了arm环境下跑就会出错。但我确实拉的是arm64的镜像,因为M1环境下跑的很好,也检查了本地镜像的cpu架构无误。

然后又找了一圈别的镜像,感觉不是很好用,就决定研究下这个镜像怎么build的。

找到镜像作者的源码仓库GitHub – wurstmeister/kafka-docker: Dockerfile for Apache Kafka

源码拉到本地,心想先自己根据源码build一个镜像试试,然后就先打了个镜像

本地M1环境跑是ok,而且放到信创环境下竟然神奇般的好了???

什么也没改,就重新打了个镜像而已….

暂时先不管原因了,我本地打好的推到仓库,大家可以取用,或者自行用作者的源码build也可以。

镜像地址:Docker Hub

拉取命令:docker pull qinchz/kafka:2.13-2.8.1

docker-compose使用示例:

version: '2'services:zookeeper:image: zookeeper:3.5.9-temurinvolumes:- ~/dev/docker/data/zookeeper/data:/dataports:- "2181:2181"kafka:image: qinchz/kafka:2.13-2.8.1# hostname: kafkadepends_on:- zookeepervolumes:- ~/dev/docker/data/kafka/kafka-logs:/kafka- /var/run/docker.sock:/var/run/docker.sockports:- "9094:9094"- "9997:9997"environment:- TZ=CST-8- KAFKA_NODE_ID=1- KAFKA_BROKER_ID=1- KAFKA_LOG_DIRS=/kafka/kafka-logs- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181# 非必须,设置自动创建 topic- KAFKA_AUTO_CREATE_TOPICS_ENABLE=true- KAFKA_LISTENERS=INSIDE://:9092,OUTSIDE://:9094- KAFKA_ADVERTISED_LISTENERS=INSIDE://kafka:9092,OUTSIDE://kafka-server:9094- KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT- KAFKA_INTER_BROKER_LISTENER_NAME=INSIDE# 非必须,设置对内存- KAFKA_HEAP_OPTS=-Xmx1G -Xms1G# 非必须,设置保存180天数据,默认7天- KAFKA_LOG_RETENTION_HOURS=4320kafka-ui:container_name: kafka-uiimage: provectuslabs/kafka-ui:v0.4.0ports:- 9011:8080depends_on:- zookeeper- kafkaenvironment:KAFKA_CLUSTERS_0_NAME: localKAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092SERVER_SERVLET_CONTEXT_PATH: /kafkauiAUTH_TYPE: "LOGIN_FORM"SPRING_SECURITY_USER_NAME: adminSPRING_SECURITY_USER_PASSWORD: admin