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

如何在单个docker-compose.yaml中初始化Pulsar租户与命名空间

可行解决方案

方案一:自定义Pulsar镜像,内置初始化脚本

这种方式把初始化逻辑打包进镜像,启动容器时自动执行,不用额外手动操作。

  • 先写个初始化脚本init-pulsar.sh:
    #!/bin/bash
    # 等Pulsar服务启动成功再执行后续操作
    until curl -s http://localhost:8080/admin/v2/clusters/standalone; do
        echo "等Pulsar起来..."
        sleep 3
    done
    
    # 创建租户abc,指定允许的集群为standalone
    bin/pulsar-admin tenants create abc --allowed-clusters standalone
    # 在租户abc下创建命名空间nnn
    bin/pulsar-admin namespaces create abc/nnn
    
  • 接着写Dockerfile,基于官方镜像扩展:
    FROM apachepulsar/pulsar:latest
    COPY init-pulsar.sh /pulsar/init-pulsar.sh
    RUN chmod +x /pulsar/init-pulsar.sh
    # 先跑初始化脚本,再启动Pulsar服务
    CMD ["/bin/bash", "-c", "/pulsar/init-pulsar.sh && /pulsar/bin/pulsar standalone"]
    
  • 最后在docker-compose.yaml里用这个自定义镜像:
    version: '3.8'
    services:
      pulsar:
        build: . # 指向放Dockerfile和脚本的目录
        ports:
          - "6650:6650"
          - "8080:8080"
        volumes:
          - pulsar-data:/pulsar/data
    volumes:
      pulsar-data:
    

方案二:用Docker Compose的init容器做初始化

不用改镜像,靠init容器在Pulsar服务就绪后执行创建命令,执行完自动退出。

  • 直接写docker-compose.yaml:
    version: '3.8'
    services:
      pulsar:
        image: apachepulsar/pulsar:latest
        command: bin/pulsar standalone
        ports:
          - "6650:6650"
          - "8080:8080"
        volumes:
          - pulsar-data:/pulsar/data
        healthcheck:
          test: ["CMD", "curl", "-f", "http://localhost:8080/admin/v2/clusters/standalone"]
          interval: 5s
          timeout: 3s
          retries: 5
    
      pulsar-init:
        image: apachepulsar/pulsar:latest
        depends_on:
          pulsar:
            condition: service_healthy
        command: >
          /bin/bash -c "
            bin/pulsar-admin tenants create abc --allowed-clusters standalone;
            bin/pulsar-admin namespaces create abc/nnn;
          "
        network_mode: service:pulsar # 和主容器共享网络,直接访问localhost
    volumes:
      pulsar-data:
    

方案三:开启Pulsar自动创建功能(开发环境首选)

如果是开发环境,直接让Pulsar自动创建租户和命名空间更省事,不用提前手动创建。

  • 先建个自定义的broker.conf,加这两行配置:
    allowAutoCreationOfTenants=true
    allowAutoCreationOfNamespaces=true
    
  • 然后在docker-compose.yaml里挂载这个配置文件:
    version: '3.8'
    services:
      pulsar:
        image: apachepulsar/pulsar:latest
        command: bin/pulsar standalone --config /pulsar/conf/broker.conf
        ports:
          - "6650:6650"
          - "8080:8080"
        volumes:
          - pulsar-data:/pulsar/data
          - ./broker.conf:/pulsar/conf/broker.conf # 挂载自定义配置
    volumes:
      pulsar-data:
    
  • 之后你的应用第一次往abc/nnn主题发消息时,Pulsar会自动把租户和命名空间都建好,完全不用额外操作。

内容的提问来源于stack exchange,提问作者izin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:53:18