使用Docker Compose部署至Azure遇InaccessibleImage错误的解决步骤
解决Azure部署Docker应用时的InaccessibleImage错误
问题背景
此前使用以下Compose文件将应用部署至远程主机完全正常,但部署到Azure时,出现镜像无法访问的错误。
原Docker Compose文件
version: '3.8' volumes: //volumes networks: pnet: services: // other services i.e. mysql etc. app: build: context: . dockerfile: Dockerfile container_name: container-app restart: always image: app-image ports: - 5000:5000 networks: - pnet
原Dockerfile内容
FROM node:16-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 5000 CMD [ "npm", "start" ]
遇到的错误
containerinstance.ContainerGroupsClient#CreateOrUpdate: Failure sending request: StatusCode=400 -- Original Error: Code="InaccessibleImage" Message="The image 'app-image' in container group 'app_api' is not accessible. Please check the image and registry credential.
解决步骤
错误核心原因是Azure容器实例(ACI)无法访问你本地构建的app-image镜像——ACI只能拉取公开容器注册表或私有注册表(如Azure容器注册表ACR)中的镜像,无法直接读取本地主机的镜像。需按以下步骤操作:
推送镜像到Azure容器注册表(ACR)
- 若还没有ACR,先创建一个:
az acr create --resource-group <你的资源组名称> --name <ACR注册表名称> --sku Basic - 登录到你的ACR:
az acr login --name <ACR注册表名称> - 给本地镜像打符合ACR格式的标签:
docker tag app-image <ACR注册表名称>.azurecr.io/app-image:latest - 推送镜像到ACR:
docker push <ACR注册表名称>.azurecr.io/app-image:latest
- 若还没有ACR,先创建一个:
修改Docker Compose文件适配ACI规则
- 更新镜像地址为ACR中的镜像路径:
将image: app-image替换为image: <ACR注册表名称>.azurecr.io/app-image:latest - 移除ACI不支持的配置项:
- 删除自定义网络
pnet的所有相关配置(ACI容器默认处于同一网络组,无需自定义) - 删除
container_name: container-app(ACI不允许指定容器名称) - 将
restart: always替换为ACI支持的restart_policy: always - 清理或替换
volumes部分(本地卷无法在ACI使用,可改为Azure文件共享或直接移除)
- 删除自定义网络
- 若ACR是私有注册表,添加访问凭证:
在app服务节点下添加凭证配置:credentials: server: <ACR注册表名称>.azurecr.io username: <ACR用户名> # 可通过`az acr credential show --name <ACR注册表名称>`获取用户名和密码 password: <ACR密码>
- 更新镜像地址为ACR中的镜像路径:
重新执行部署
确保Docker上下文已切换到Azure环境,然后运行部署命令:docker compose up
内容的提问来源于stack exchange,提问作者dark
相关产品推荐
相关产品推荐

