Ошибка «Отказано в доступе» при записи файла в Docker-контейнер - PullRequest
0 голосов
/ 04 июля 2019

При попытке потоковой передачи файла pdf в браузер мне отказано в разрешении. Я установил разрешения на чтение, запись и выполнение для временной папки в DockerFile. Любые указатели на то, что я делаю неправильно? Я размещаю приложение ASP.Net Core в качестве службы приложений Azure и контейнера Linux для докера, если это имеет значение.

StackTrace:

Exception occured: Syncfusion.Pdf.PdfException: /usr/bin/xvfb-run: 183: /usr/bin/xvfb-run: /app/QtBinariesLinux/Syncfusion.WebKitWrapper: Permission denied    
   at Syncfusion.HtmlConverter.HtmlConverter.ConvertHtmlToPdf(String url, Int32 width, Int32 height)

Dockerfile:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
RUN chmod a+rwx -R /usr/bin/xvfb-run
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["Scrubber/Scrubber.csproj", "Scrubber/"]
COPY ["SimplerProducts.MicrosoftEntityFrameworkCoreStorage/SimplerProducts.MicrosoftEntityFrameworkCoreStorage.csproj", "SimplerProducts.MicrosoftEntityFrameworkCoreStorage/"]
RUN dotnet restore "Scrubber/Scrubber.csproj"
COPY . .
WORKDIR "/src/Scrubber"
RUN dotnet build "Scrubber.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "Scrubber.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Scrubber.dll"]

CSharp код:

public IActionResult OnPostExportToPDFAsync()
    {
      var htmlToPdfConverter = new HtmlToPdfConverter
      {
        ConverterSettings = new WebKitConverterSettings
        {
          WebKitPath = Path.Combine(HostingEnvironment.ContentRootPath, "QtBinariesLinux"),
          TempPath = Path.GetTempPath(),
          SplitTextLines = false,
          SplitImages = false,
          EnableRepeatTableHeader = true,
          EnableRepeatTableFooter = true,
    }
      };
      var pdfDocument = htmlToPdfConverter.Convert("http://www.google.com");
      var memoryStream = new MemoryStream();
      pdfDocument.Save(memoryStream);
      return File(memoryStream.ToArray(), System.Net.Mime.MediaTypeNames.Application.Pdf, "Sample.pdf");
    }

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

Конвертер может выдать исключение в планах потребления / бесплатного / общего хостинга в Azure. Убедитесь, что вы не используете упомянутые планы хостинга для публикации в среде Azure. Из-за ограничений доступа и ограничения этого хостинг-плана, это предотвращает загрузку процесса браузера. Таким образом, преобразование не будет выполнено в тарифных планах потребления / бесплатного / общего хостинга в среде Azure. Другие тарифные планы не имеют ограничений для загрузки процесса браузера.

0 голосов
/ 04 июля 2019

Это была скорее проблема Azure, чем проблемы с Docker или правами доступа к файлам.Мне удалось решить эту проблему, изменив группу ресурсов Azure с F1-Free на S1-Basic для службы приложений.

...