Azure容器应用服务Docker Compose绑定挂载启动报错求助
Azure容器应用服务启动my_app报错解决方案
报错信息
ERROR - Exception in multi-container config parsing: YamlException: (Line: 22, Col: 9, Idx: 498) - (Line: 22, Col: 37, Idx: 526): Bind mount must start with ${WEBAPP_STORAGE_HOME}.
问题根源
Azure Web App for Containers 对docker-compose的卷挂载有强制规则:
- 绑定挂载不能使用相对路径(如
./backend/:/usr/src/backend/),必须以${WEBAPP_STORAGE_HOME}开头 - 本地声明的命名卷无法直接使用,必须映射到Azure配置的存储路径
修改方案
1. 替换所有相对路径挂载
将docker-compose中所有以./开头的绑定挂载,替换为${WEBAPP_STORAGE_HOME}开头的路径,示例:
- 原
./backend/:/usr/src/backend/→ 修改为${WEBAPP_STORAGE_HOME}/backend:/usr/src/backend/ - 原
./frontend/:/usr/src/frontend/→ 修改为${WEBAPP_STORAGE_HOME}/frontend:/usr/src/frontend/
2. 调整命名卷为Azure兼容格式
删除原配置中顶级的volumes:节点,把postgres_data、static_volume、media_volume这些命名卷直接替换为${WEBAPP_STORAGE_HOME}下的路径。
修改后的完整docker-compose配置
version: '3' services: db: container_name: my_app_django_db image: postgres:14.5-alpine volumes: - ${WEBAPP_STORAGE_HOME}/postgres_data:/var/lib/postgresql/data/ networks: - my_app_network env_file: - ./.env.prod app: container_name: my_app_django_app build: context: ./backend dockerfile: Dockerfile.prod restart: always command: python manage.py runserver 0.0.0.0:8000 volumes: - ${WEBAPP_STORAGE_HOME}/backend:/usr/src/backend/ networks: - my_app_network ports: - 8000:8000 env_file: - ./.env.prod depends_on: - db react: container_name: my_app_react_app build: context: ./frontend dockerfile: Dockerfile.prod restart: always command: npm start volumes: - ${WEBAPP_STORAGE_HOME}/frontend:/usr/src/frontend/ networks: - my_app_network ports: - 3000:3000 env_file: - ./.env.prod depends_on: - app redis: container_name: my_app_redis image: redis:7-alpine ports: - 6379:6379 networks: - my_app_network celery_worker: container_name: my_app_celery_worker restart: always build: context: ./backend command: celery -A my_app_settings worker --loglevel=info --logfile=logs/celery.log volumes: - ${WEBAPP_STORAGE_HOME}/backend:/usr/src/backend networks: - my_app_network env_file: - ./.env.prod depends_on: - db - redis - app celery-beat: container_name: my_app_celery_beat build: ./backend command: celery -A my_app_settings beat -l info volumes: - ${WEBAPP_STORAGE_HOME}/backend:/usr/src/backend networks: - my_app_network env_file: - ./.env.prod depends_on: - db - redis - app nginx: container_name: my_app_nginx restart: always build: ./azure/nginx ports: - "8080:8080" networks: - my_app_network volumes: - ${WEBAPP_STORAGE_HOME}/static_volume:/home/app/web/staticfiles - ${WEBAPP_STORAGE_HOME}/media_volume:/home/app/web/mediafiles depends_on: - app networks: my_app_network: driver: bridge
3. 匹配应用服务路径映射
确保你的应用服务路径映射中,已创建对应上述路径的存储映射(比如/backend、/postgres_data、/static_volume等分别映射到你的Azure存储资源),与你提供的配置截图保持一致。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

