使用Azurite Docker镜像时如何在启动时自动创建Blob容器?
Azurite 启动自动创建Blob容器的实现方案
Azurite官方镜像没有内置类似Postgres init.sql的自动初始化脚本机制,你可以通过以下两种常用方案实现需求:
方案1:流水线/容器编排侧独立执行初始化逻辑
这是测试场景最常用的方案,不需要修改Azurite官方镜像:
- 核心逻辑:先启动Azurite容器,等待Blob服务默认的10000端口就绪后,直接调用接口创建容器。
- 你可以选择用Azure CLI、azcopy甚至直接发REST请求执行创建操作,不需要额外侵入Azurite镜像。
示例的初始化脚本init-azurite.sh参考:
#!/bin/sh # 等待Azurite Blob服务启动 until nc -z azurite 10000; do echo "等待Azurite启动中..." sleep 1 done # 使用默认开发账号连接字符串创建容器,可替换为你需要的容器名 az storage container create \ --name test-container \ --connection-string "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite:10000/devstoreaccount1;"
如果用docker-compose编排,可以单独加一个初始化服务,依赖Azurite服务,挂载上述脚本执行即可。
方案2:自定义Azurite镜像内置初始化逻辑
如果你需要开箱即用的镜像,可以基于官方Azurite镜像做一层封装,把初始化逻辑内置到镜像的启动入口中:
示例Dockerfile参考:
FROM mcr.microsoft.com/azure-storage/azurite:latest # 安装依赖,可选安装Azure CLI或者仅保留netcat用curl调用REST接口(镜像体积更小) RUN apt update && apt install -y netcat curl && rm -rf /var/lib/apt/lists/* # 复制初始化脚本 COPY init-azurite.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/init-azurite.sh # 替换默认启动入口 ENTRYPOINT ["/usr/local/bin/init-azurite.sh"] CMD ["azurite", "--blobHost", "0.0.0.0", "--queueHost", "0.0.0.0", "--tableHost", "0.0.0.0"]
对应修改init-azurite.sh,在初始化完成后将Azurite进程切到前台即可:
#!/bin/sh # 后台启动Azurite "$@" & AZURITE_PID=$! # 等待服务就绪 until nc -z localhost 10000; do sleep 1 done # 用REST接口创建容器,不需要安装Azure CLI,镜像体积更小 curl -X PUT \ http://localhost:10000/devstoreaccount1/test-container?restype=container \ -H "x-ms-version: 2020-04-08" \ -H "Authorization: SharedKey devstoreaccount1:Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==" # 切回前台Azurite进程 wait $AZURITE_PID
内容的提问来源于stack exchange,提问作者user3533716
相关产品推荐
相关产品推荐

