Azure Web App持久存储启用后容器数据被覆盖问题求助
问题
尝试启用Azure Web App持久存储,但容器文件夹内的内容持续被hostingstart.html覆盖。基于Apache HTTPD做了简单测试,docker-compose配置如下:
version: '3.3' services: apache: image: httpd:latest # volumes: # - ${WEBAPP_STORAGE_HOME}/site/wwwroot:/usr/local/apache2/htdocs ports: - "8000:80" restart: always
执行步骤:
- 创建资源组:
az group create --name PandaRG --location "East US" - 创建应用服务计划:
az appservice plan create --name PandaBearAppPlan --resource-group PandaRG --sku B1 --is-linux - 创建Web应用:
az webapp config container set --resource-group PandaRG --name pandabear --multicontainer-config-type compose --multicontainer-config-file docker-compose-apache.yml - 访问Web应用,显示默认Apache页面“It works”
- 启用持久存储:
az webapp config appsettings set --resource-group PandaRG --name pandabear --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE - 取消docker-compose文件中
volumes和WEBAPP_STORAGE_HOME相关行的注释 - 使用新配置更新应用:
az webapp config container set --resource-group PandaRG --name pandabear --multicontainer-config-type compose --multicontainer-config-file docker-compose-apache.yml - 再次访问Web应用,默认Apache页面消失,显示“hostingstart.html”
请问如何在设置持久存储时避免容器内文件被覆盖?
解决方法
问题根源是Azure App Service的${WEBAPP_STORAGE_HOME}/site/wwwroot目录默认自带hostingstart.html,挂载容器目录时,容器原有内容会被挂载目录的内容覆盖。以下是两种可行的解决方式:
方式一:初始化持久存储目录内容
- 进入容器内部:
az webapp ssh --resource-group PandaRG --name pandabear - 将Apache默认
htdocs目录的内容复制到持久存储目录:cp -r /usr/local/apache2/htdocs/* ${WEBAPP_STORAGE_HOME}/site/wwwroot/ - 退出SSH连接后重启Web应用:
az webapp restart --resource-group PandaRG --name pandabear
重启后,持久存储目录已有Apache默认文件,访问时会显示“It works”而非hostingstart.html。
方式二:修改挂载路径并调整Apache配置
不直接挂载到Apache默认的htdocs目录,改用自定义目录并修改Apache文档根路径:
- 更新docker-compose.yml:
version: '3.3' services: apache: image: httpd:latest volumes: - ${WEBAPP_STORAGE_HOME}/site/wwwroot:/usr/local/apache2/custom ports: - "8000:80" restart: always command: > bash -c "echo 'DocumentRoot \"/usr/local/apache2/custom\"' >> /usr/local/apache2/conf/httpd.conf && httpd-foreground" - 重新部署应用:
az webapp config container set --resource-group PandaRG --name pandabear --multicontainer-config-type compose --multicontainer-config-file docker-compose-apache.yml
这种方式既保留了持久存储功能,又不会覆盖容器原有的默认配置文件。
内容的提问来源于stack exchange,提问作者DaR
相关产品推荐
相关产品推荐

