Spring Boot CQRS项目Docker-Compose启动异常:Zookeeper持续拉取
问题:Docker Compose拉取Zookeeper镜像卡住,无法启动Spring Boot CQRS项目的account-cmd模块
我在容器化Spring Boot CQRS项目的account-cmd模块时遇到问题,执行docker-compose up --build命令时,Zookeeper镜像一直处于拉取状态,导致整个环境无法启动测试。项目依赖MongoDB、Kafka、Zookeeper,当前仅聚焦account-cmd模块的容器化部署。
Dockerfile内容
FROM openjdk:17-jdk-slim AS build COPY pom.xml mvnw ./ COPY .mvn .mvn RUN ./mvnw dependency:resolve COPY src src RUN ./mvnw package -Dmaven.test.skip FROM openjdk:17-jdk-slim WORKDIR account-cmd COPY --from=build target/*.jar account-cmd.jar ENTRYPOINT ["java", "-jar", "account-cmd.jar"]
docker-compose.yml内容
version: '3.9' services: app: image: 'account-cmd:latest' build: context: . ports: - "5000:8080" depends_on: - zookeeper - kafka - mongodb environment: - kafka.producer.bootstrap-servers=broker:9092 - kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer - kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer - spring.data.mongodb.host=mongodb - spring.data.mongodb.port=27017 - spring.data.mongodb.database=bankAccount - server.port=5000 networks: - bankAccount mongodb: image: "mongo:latest" container_name: mongo-container restart: always ports: - "27017:27017" volumes: - mongodb_data_container:/data/db networks: - bankAccount zookeeper: image: "bitnami/zookeeper" restart: always ports: - "2181:2181" volumes: - "zookeeper_data:/bitnami" environment: - ALLOW_ANONYMOUS_LOGIN=yes networks: - bankAccount kafka: image: "bitnami/kafka" ports: - "9092:9092" restart: always volumes: - "kafka_data:/bitnami" environment: - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_LISTENERS=PLAINTEXT://:9092 - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 depends_on: - zookeeper networks: - bankAccount volumes: mongodb_data_container: zookeeper_data: driver: local kafka_data: driver: local networks: bankAccount:
解决方案建议
1. 更换Zookeeper镜像源
Bitnami镜像可能因网络问题拉取缓慢,换成官方或国内镜像:
- 改用官方Zookeeper镜像:
image: zookeeper:3.8 - 或者使用阿里云镜像:
image: registry.cn-hangzhou.aliyuncs.com/acs/zookeeper:3.8
修改后的zookeeper服务配置示例:
zookeeper: image: zookeeper:3.8 restart: always ports: - "2181:2181" volumes: - "zookeeper_data:/data" environment: - ZOO_ALLOW_ANONYMOUS_LOGIN=yes networks: - bankAccount
2. 手动提前拉取镜像
执行命令手动拉取Zookeeper和Kafka镜像,避免Compose启动时等待:
docker pull bitnami/zookeeper docker pull bitnami/kafka
3. 检查Docker网络配置
- 确认Docker daemon网络正常,可尝试重启Docker服务:
# Linux sudo systemctl restart docker # Windows net stop docker && net start docker - 检查是否有代理设置导致镜像拉取受阻,可临时关闭代理或配置Docker镜像加速器。
4. 调整启动依赖的健康检查(可选)
给Zookeeper添加健康检查,确保服务就绪后再启动Kafka和应用:
zookeeper: # 保留原有配置 healthcheck: test: ["CMD", "zkServer.sh", "status"] interval: 10s timeout: 5s retries: 5
然后更新Kafka和app的依赖配置:
kafka: # 保留原有配置 depends_on: zookeeper: condition: service_healthy app: # 保留原有配置 depends_on: zookeeper: condition: service_healthy kafka: condition: service_started mongodb: condition: service_started
内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu
相关产品推荐
相关产品推荐

