You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure App Service中Docker-Compose部署失败:挂载路径错误排查

解决Azure App Service多容器部署中Bind Mount路径错误问题

错误原因

Azure App Service对多容器部署的Docker-Compose配置有两项强制要求:

  • **绑定挂载(bind mount)**的主机端路径必须以${WEBAPP_STORAGE_HOME}开头,你的配置第12行的backend/:/usr/src/backend/使用了相对路径,违反该规则导致解析失败。
  • 你已将镜像推送到ACR,但配置中仍保留build字段——该字段在App Service多容器部署中无效,应直接引用ACR中的成品镜像。

解决步骤

1. 替换build为image字段,引用ACR镜像

将每个服务的build配置替换为ACR中的镜像地址(需包含正确标签,如latest),示例:

# 原build配置
build:
  context: ./backend
  dockerfile: Dockerfile

# 替换为image配置
image: app.azurecr.io/app-app:latest

2. 修正绑定挂载路径,适配Azure规则

将所有相对路径的挂载替换为${WEBAPP_STORAGE_HOME}开头的路径,对应你在「路径映射」中配置的存储目录。例如:

# 原错误挂载
volumes:
  - backend/:/usr/src/backend/

# 修正后挂载
volumes:
  - ${WEBAPP_STORAGE_HOME}/backend:/usr/src/backend/

3. 调整容器名称(规范优化)

container_name仅为容器内部标识,无需包含ACR地址,修正为简洁名称即可,比如app-app而非app.azurecr.io/app-app。

修改后的完整Docker-Compose示例

version: '3'

services:
  app:
    container_name: app-app
    image: app.azurecr.io/app-app:latest
    restart: always
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - ${WEBAPP_STORAGE_HOME}/backend:/usr/src/backend/
    ports:
      - 8000:8000
    env_file:
      - .env

  celery_worker:
    container_name: app-celery-worker
    image: app.azurecr.io/app-celery-worker:latest
    restart: always
    command: celery -A app_settings worker --loglevel=info --logfile=logs/celery.log
    volumes:
      - ${WEBAPP_STORAGE_HOME}/backend:/usr/src/backend
    env_file:
      - .env
    depends_on:
      - app

  celery-beat:
    container_name: app-celery-beat
    image: app.azurecr.io/app-celery-beat:latest
    command: celery -A app_settings beat -l info
    volumes:
      - ${WEBAPP_STORAGE_HOME}/backend:/usr/src/backend
    env_file:
      - .env
    depends_on:
      - app

  nginx:
    container_name: app-nginx
    image: app.azurecr.io/app-nginx:latest
    restart: always
    ports:
      - "8080:8080"
    volumes:
      - ${WEBAPP_STORAGE_HOME}/static:/home/app/web/static
      - ${WEBAPP_STORAGE_HOME}/media:/home/app/web/media
    depends_on:
      - app

# 若需保留命名卷,确保已在App Service路径映射中关联Azure存储
volumes:
  backend:
  static:
  media:

额外注意事项

  • 确保${WEBAPP_STORAGE_HOME}后的子路径与你在「路径映射」中配置的存储路径完全匹配,否则无法正确关联Azure存储。
  • 镜像标签需与推送到ACR的标签一致,避免拉取失败。
  • 若使用命名卷持久化,需在App Service的「路径映射」中为每个命名卷指定对应的Azure存储目录。

内容的提问来源于stack exchange,提问作者Adrian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:35:29