添加Azure File Share后,GitHub Actions部署Weaviate持久化容器失败
问题描述
在Azure上部署Weaviate容器后,添加Azure File Share实现数据持久化时容器陷入等待状态,Log Analytics报错:standard_init_linux.go:228: exec user process caused: exec format error。镜像通过Mac Pro M3手动拉取、标记并推送到Azure Container Registry(ACR),怀疑是架构不兼容导致。现有可用资源:Azure存储账户、带贡献权限的Service Principal、StorageV2类型的LRS文件共享。
正常运行(无持久化)的GitHub Actions部署脚本
- name: 'Deploy Weaviate to Azure Container Instances' uses: 'azure/aci-deploy@v1.1.3' with: resource-group: ${{ secrets.RESOURCE_GROUP }} dns-name-label: ${{ vars.WEAVIATE }} image: ${{ secrets.REGISTRY_LOGIN_SERVER }}/${{ secrets.WEAVIATE_IMAGE_NAME }} registry-login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }} registry-username: ${{ secrets.AZ_TECHNICAL_USER_ID }} registry-password: ${{ secrets.AZ_TECHNICAL_USER_SECRET }} name: ${{ vars.WEAVIATE }} environment-variables: 'QUERY_DEFAULTS_LIMIT=25 AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true PERSISTENCE_DATA_PATH=/var/lib/weaviate ENABLE_MODULES="" CLUSTER_HOSTNAME=node1' log-analytics-workspace: ${{ secrets.LOG_ANALYTICS_WORKSPACE_ID }} log-analytics-workspace-key: ${{ secrets.LOG_ANALYTICS_WORKSPACE_KEY }} log-type: 'ContainerInstanceLogs' ports: '8080 50051' location: ${{ secrets.LOCATION }} memory: 3
添加Azure File Share后无法运行的脚本
- name: 'Deploy Weaviate to Azure Container Instances' uses: 'azure/aci-deploy@v1.1.3' with: resource-group: ${{ secrets.RESOURCE_GROUP }} dns-name-label: ${{ vars.WEAVIATE }} image: ${{ secrets.REGISTRY_LOGIN_SERVER }}/${{ secrets.WEAVIATE_IMAGE_NAME }} registry-login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }} registry-username: ${{ secrets.AZ_TECHNICAL_USER_ID }} registry-password: ${{ secrets.AZ_TECHNICAL_USER_SECRET }} name: ${{ vars.WEAVIATE }} environment-variables: 'QUERY_DEFAULTS_LIMIT=25 AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true PERSISTENCE_DATA_PATH=/var/lib/weaviate ENABLE_MODULES="" CLUSTER_HOSTNAME=node1' azure-file-volume-account-name: ${{ secrets.AZURE_STORAGE_ACCOUNT_NAME }} azure-file-volume-account-key: ${{ secrets.AZURE_STORAGE_ACCOUNT_KEY }} azure-file-volume-share-name: weaviate-data azure-file-volume-mount-path: /var/lib/weaviate log-analytics-workspace: ${{ secrets.LOG_ANALYTICS_WORKSPACE_ID }} log-analytics-workspace-key: ${{ secrets.LOG_ANALYTICS_WORKSPACE_KEY }} log-type: 'ContainerInstanceLogs' ports: '8080 50051' location: ${{ secrets.LOCATION }} memory: 3
解决思路
- 验证镜像架构兼容性:Mac Pro M3是ARM64架构,Azure容器实例默认使用AMD64(x86_64)节点。推送镜像时需确保构建/拉取的是适配AMD64的Weaviate镜像,或者在ACI部署时指定ARM64节点。
- 拉取镜像时指定架构:
docker pull --platform linux/amd64 semitechnologies/weaviate:latest,再标记推送至ACR。 - 若需保留ARM64镜像,在ACI部署脚本中添加
cpu-architecture: ARM64参数,确保Azure分配对应架构的节点。
- 拉取镜像时指定架构:
- 检查文件共享挂载权限:Azure File Share挂载到容器后,需确保容器内的Weaviate进程对挂载路径
/var/lib/weaviate有读写权限。可尝试先手动创建共享内的目录,或在容器启动命令中添加权限设置步骤(如chown -R weaviate:weaviate /var/lib/weaviate)。 - 排查环境变量与挂载路径冲突:确认
PERSISTENCE_DATA_PATH设置的路径与挂载路径一致,且挂载操作未覆盖容器内必要的初始化文件。可尝试临时修改挂载路径为其他目录(如/mnt/weaviate-data),同时调整PERSISTENCE_DATA_PATH参数,验证是否为路径冲突导致启动失败。 - 检查ACR镜像推送完整性:重新推送镜像至ACR,确保推送过程无报错,且ACR中镜像的架构标签正确。可通过
az acr repository show-manifests --name <ACR_NAME> --repository <IMAGE_NAME>查看镜像的架构信息。
内容的提问来源于stack exchange,提问作者RSale
相关产品推荐
相关产品推荐

