You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 13:33:11