如何在单个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
相关产品推荐
相关产品推荐

