首页 > 解决方案 > 在运行自定义 Linux 容器的 Azure 应用服务中与 Azure 存储帐户(AzureFiles NOT AzureBlob)同步的文件会提供 502 错误网关

问题描述

语境

每次容器启动时,我都使用 Azure 文件共享在应用服务中同步我的媒体文件。我使用文件共享而不是 Blob 存储的原因是因为 Azure 没有为 Blob 存储功能提供写访问权限(只有读访问权限),更多信息请点击此处。此外,文件同步与文件共享存储一起工作正常,即我可以在容器安装路径中看到上传到 Azure 文件共享的文件,即:容器运行/var/www/html/<app-name>/web/sites/default/filesDrupal 9.2.4应用程序也可以写入相同的挂载路径,我也可以在文件共享上看到新创建的文件。

问题

问题是上述挂载路径中的所有图像/PDF 文件都在502 Bad Gateway浏览器上显示,但是 Drupal 应用程序在同一挂载路径中加载的 CSS 文件工作正常。

链接到 Web 应用程序:rtstaged9.azurewebsites.net

该站点未使用 SSL。

我已经尝试过但不起作用的事情:

  1. 将文件共享层从“热”更改为“性能优化”。
  2. 扩大应用服务计划以使用 P1V3(8 GB 内存)的 P2V3(16 GB 内存)。
  3. 将容器中apache2的FQDN(Servername)设置为:rtstaged9.azurewebsites.net
  4. 应用服务中的日志流显示浏览器上显示200 OK的相同图像/PDF 。502 Bad Gateway
  5. 应用服务的default_docker.log下方/LogFiles/还显示图像/PDF 200 OK
  6. Drupal没有任何错误的/admin/reports/dblog迹象。502 Bad Gateway
  7. 尝试使用drush cr命令清除缓存。

此外,如果容器未连接到存储帐户,则上述挂载路径中的图像/PDF 工作正常,但文件当然不会以这种方式保存在容器中。

另外,以防万一下面是我用来构建 Drupal 容器并将其推送到Azure Container Registry那里和从那里推送的 Dockerfile,我正在使用应用程序服务来使用图像,再加上一个 Azure MySQL 实例连接到同一个应用程序服务。如果您希望我提供更多信息,请告诉我,我们将不胜感激。

FROM osiolabs/drupaldevwithdocker-php:7.4

ENV APACHE_DOCROOT_DIR=/var/www/html/<app-name>/web/
#Set the Server name
ENV APACHE_SITE_NAME=rtastaged9.azurewebsites.net
#Set the Server alias
ENV APACHE_SITE_ALIAS=rtastaged9.azurewebsites.net

COPY /<app-name> /var/www/html/<app-name>

RUN composer self-update --2

WORKDIR /var/www/html/RTA-D8 
RUN composer install
WORKDIR ../../../../

# ssh for azure app service
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get update \
    && apt-get install -y --no-install-recommends openssh-server \
    && echo "$SSH_PASSWD" | chpasswd 
RUN mkdir /run/sshd
COPY sshd_config /etc/ssh/

EXPOSE 80 443 2222

CMD /usr/sbin/sshd && apachectl -D FOREGROUND

标签: dockerapachedrupalazure-web-app-serviceazure-storage

解决方案


推荐阅读