部署Docker Compose至Azure容器实例失败:镜像拉取权限被拒
解决Azure Web App部署Docker Compose镜像拉取权限问题
核心问题分析
- 镜像地址错误:你的Docker Compose中FastAPI服务使用的是Docker Hub地址
webmedinsight/rmed1:build-tag-1,但你计划使用Azure容器注册表(ACR)存储镜像,导致Azure尝试从Docker Hub拉取不存在的私有仓库(或无权限)。 - 容器凭证配置冲突:Web App可能配置了错误的Docker Hub凭证,导致拉取公共镜像(chromadb、mongo)时也触发认证错误,虽然最终公共镜像拉取成功,但FastAPI镜像拉取彻底失败。
- 不必要的启动命令:
docker-compose up --build在Azure Web App多容器部署中无需手动指定,平台会自动处理镜像拉取和容器启动。
具体解决步骤
1. 修正Docker Compose中的镜像地址
将FastAPI服务的image字段替换为你的ACR完整地址,格式为<ACR名称>.azurecr.io/<镜像名>:<标签>。根据你提供的ACR截图,修正后的docker-compose.yml如下:
version: '3' services: chromadb: image: chromadb/chroma:latest container_name: chromadb ports: - "8001:8000" volumes: - chroma_data:/chroma/.chroma mongo: image: mongo:latest container_name: mongodb ports: - "27017:27017" volumes: - mongo_data:/data/db fastapi: # 替换为你的ACR镜像地址 image: webmedinsight.azurecr.io/rmed1:build-tag-1 container_name: fastapi_app ports: - "8000:8000" depends_on: - chromadb - mongo environment: MONGO_HOST: mongo volumes: chroma_data: mongo_data:
2. 配置Web App关联ACR凭证
- 进入Azure Web App的「配置」>「容器设置」
- 选择「多容器」,上传修正后的docker-compose.yml文件
- 在「注册表设置」区域:
- 注册表类型选择「Azure容器注册表」
- 选择你的ACR实例,平台会自动填充用户名和密码(若未自动填充,可从ACR的「访问密钥」页面获取管理员用户名和密码)
- 若之前配置过Docker Hub的凭证,务必删除,避免干扰公共镜像拉取
3. 移除不必要的启动命令
删除Web App配置中的启动命令docker-compose up --build,Azure会自动处理多容器的启动流程。
4. 确认ACR中存在目标镜像
确保rmed1:build-tag-1已成功推送到ACR,可通过以下命令验证:
# 登录ACR az acr login --name webmedinsight # 推送镜像(若未推送) docker tag webmedinsight/rmed1:build-tag-1 webmedinsight.azurecr.io/rmed1:build-tag-1 docker push webmedinsight.azurecr.io/rmed1:build-tag-1
验证部署
完成上述步骤后,重启Web App,查看日志是否正常拉取所有镜像并启动容器。
内容的提问来源于stack exchange,提问作者ניר שרון
相关产品推荐
相关产品推荐

