Ich portiere eine alte .NET-Web-API-Anwendung zur Ausführung auf Heroku in einem Docker-Container. Ich benutze dazu ein Mono-Bild.Zugriff auf X-Server über einen Docker-Container auf Heroku
Hier ist meine Dockerfile:
FROM mono:latest
EXPOSE 5000
ENV PORT 5000
ADD ./ /api
WORKDIR /api
RUN nuget restore -NonInteractive
RUN msbuild webapi.sln /p:Configuration=Release
CMD mono /api/MyProject/bin/Release/MyProject.exe port:$PORT
Ziemlich einfach, die neuesten Mono Bild verwenden, um die Quelle zu kopieren, die NuGet Pakete wiederherzustellen, die Lösung erstellen und auszuführen. Die $ PORT-Umgebungsvariable wird von Heroku oder standardmäßig 5000 für meine lokale Entwicklungsumgebung gesetzt.
Alles funktioniert gut, außer einem bestimmten API-Controller, der einen PDF-Bericht generiert. Der Bericht wird von PdfSharp generiert, das für das erforderliche Rendering von der System.Drawing-Assembly abhängig ist. Dies bedeutet jedoch eine Abhängigkeit von der Anzeige.
Wenn ich diesen Controller aufrufen, um einen Bericht zu generieren, erhalte ich den folgenden Fehler.
Could not open display (X-Server required. Check your DISPLAY environment variable).
Ich benötige Zugriff auf einen X-Server, um das erforderliche Rendering durchzuführen. Ich habe viele Dinge ausprobiert, stecke aber immer an diesem Fehler fest.