Startseite
» PC-Tipps
»
LibreOffice im Headless-Modus in Docker für die PDF-Konvertierung ausführen
LibreOffice im Headless-Modus in Docker für die PDF-Konvertierung ausführen
Ja. Für einmalige Dokumentkonvertierungen erstellen Sie ein kleines Docker-Image mit installiertem LibreOffice und führen soffice --headlesses aus --convert-to. Binden Sie das Eingabeverzeichnis schreibgeschützt und ein separates Ausgabeverzeichnis mit Schreibzugriff ein, damit die PDF-Datei auf Ihrem Hostsystem erscheint. Dieses Beispiel verwendet ein Debian-basiertes Image und konvertiert eine DOCX-Datei in PDF; LibreOffice wird dabei nicht als Netzwerkdienst bereitgestellt.
Das Dockerfile installiert LibreOffice Writer und ein Basisschriftpaket und verwendet dann soffice als Container-Befehl.
Was bewirkt der Headless-Modus und wann ist Docker sinnvoll?
Der Headless-Modus startet LibreOffice ohne grafische Benutzeroberfläche. LibreOffice dokumentiert diesen Modus für die Nutzung über die Kommandozeile und die API. Die Kommandozeilenoptionen unterstützen die Dateikonvertierung mit einem Ausgabeverzeichnis. Docker verpackt die Anwendung und ihre Abhängigkeiten, sodass ein Skript oder eine Workstation dasselbe Container-Image ausführen kann, ohne die Desktop-Suite auf dem Host installieren zu müssen.
Dieses Muster eignet sich gut für lokale Batch-Jobs, CI-Tasks oder einen Backend-Worker, der eine Datei empfängt und das konvertierte Ergebnis speichert. Ein einfacher Headless-Container ist an sich keine HTTP-Konvertierungs-API: Er lauscht auf keinem Port und akzeptiert keine Web-Uploads. Benötigen Sie einen persistenten Dienst, implementieren Sie eine API und eine Job-Queue um den Konvertierungsprozess und fügen Sie Anforderungsvalidierung, Timeouts, Dateigrößenbeschränkungen und Isolation hinzu.
1. Erstellen Sie die Eingabe- und Ausgabeverzeichnisse.
Erstellen Sie auf einem Linux- oder macOS-Host mit Bash oder einer ähnlichen Shell einen Projektordner mit separaten Verzeichnissen. Legen Sie das Quelldokument hinein inputund lassen Sie die Verzeichnisse outputbeim ersten Ausführen leer.
mkdir -p lo-work/input lo-work/output
cp report.docx lo-work/input/
cd lo-work
Die folgenden Docker-Befehle verwenden Unix-Pfade und Shell-Syntax. Unter Windows müssen Sie die Hostpfad-Syntax für PowerShell oder die Eingabeaufforderung anpassen und sicherstellen, dass Docker Desktop auf das Laufwerk zugreifen darf, das diese Ordner enthält.
2. Erstellen Sie ein Image mit LibreOffice
Erstellen Sie eine Datei namens „ Dockerfileinside“ lo-workmit folgendem Inhalt:
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
libreoffice-writer fonts-liberation \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["soffice"]
libreoffice-writerEnthält Writer und die benötigten Konvertierungsfilter für gängige Textverarbeitungsformate. Fügen Sie diese hinzu libreoffice-calc, libreoffice-impresswenn der Container Tabellenkalkulationen oder Präsentationen konvertieren soll. Das Schriftartenpaket ist nur eine Basisversion; installieren Sie die Schriftarten, die Ihre Dokumente benötigen und für die Sie die Nutzungsrechte besitzen, da fehlende Schriftarten den Zeilenumbruch und Seitenumbrüche beeinträchtigen können.
Erstellen Sie das Image aus dem Verzeichnis, das die Dockerfile enthält:
docker build -t lo-headless .
Das Beispiel verwendet Debian Bookworm-Paketnamen. Basis-Image-Tags und Repository-Pakete ändern sich im Laufe der Zeit. Wählen Sie für einen Produktions-Build ein gepflegtes Basis-Image, erstellen Sie es regelmäßig neu, um Sicherheitsupdates zu erhalten, und fixieren Sie das Basis-Image anhand des Digests, wenn Sie reproduzierbare Builds benötigen. Vermeiden Sie die Installation von Paketen aus einem nicht zugehörigen Repository, nur um einem Tutorial zu folgen.
Erstellen Sie das lokale Image aus der Dockerfile, bevor Sie den Konvertierungscontainer ausführen.
3. LibreOffice mit separaten Mounts ausführen
Starten Sie einen temporären Container und übergeben Sie die Konvertierungsoptionen nach dem Image-Namen. Das Eingabeverzeichnis ist schreibgeschützt; nur das Ausgabeverzeichnis ist beschreibbar. Die --userOption führt den Prozess unter Linux mit den Benutzer- und Gruppen-IDs des Hosts aus und HOME=/tmpgibt LibreOffice ein beschreibbares Home-Verzeichnis. Passen Sie die Ordnerberechtigungen an, falls der Host-Benutzer keine Schreibrechte hat output.
--headlessDie grafische Benutzeroberfläche wird unterdrückt, --convert-to pdf:writer_pdf_Exportder PDF-Exportfilter ausgewählt und --outdirdas Ergebnis im eingebundenen Ausgabeverzeichnis gespeichert. Der eindeutige Benutzerprofilpfad ermöglicht diesem Prozess ein beschreibbares LibreOffice-Konfigurationsverzeichnis. Wenn Sie mehrere Konvertierungen gleichzeitig in einem langlebigen Container ausführen, verwenden Sie für jeden Prozess einen separaten Profilpfad.
Verwenden Sie --mountstattdessen -vdie explizitere Mount-Syntax von Docker. Bind-Mounts sind an Pfade auf dem Host des Docker-Daemons gebunden, während Read-Write-Mounts Containerprozessen ermöglichen, Dateien auf dem Host zu ändern. Halten Sie Mounts eng, vermeiden Sie das Mounten Ihres Home-Verzeichnisses oder Docker-Sockets und führen Sie keinen Dokumentenkonvertierungs-Worker mit unnötigen Berechtigungen aus.
Der Befehl „run“ übergibt die Quelldatei an soffice und beschränkt gleichzeitig den Zugriff des Hosts auf die beiden Projektordner.
4. Bestätigen Sie, dass die PDF-Datei erstellt wurde.
Überprüfen Sie das Ausgabeverzeichnis des Hosts, nachdem Docker beendet wurde:
ls -l output/
file output/report.pdf
test -s output/report.pdf
Die PDF-Datei muss vorhanden und nicht leer sein. Öffnen Sie sie in einem PDF-Reader und überprüfen Sie Seitenzahl, Tabellen, Bilder, Seitenumbrüche und Schriftarten, bevor Sie sich darauf verlassen. Ein erfolgreicher Prozessabschluss beweist nicht, dass alle Elemente wie gewünscht dargestellt wurden, insbesondere wenn ein Dokument Schriftarten oder Funktionen verwendet, die im Container nicht verfügbar sind. Verwenden Sie für jeden Durchlauf ein neues Ausgabeverzeichnis oder einen neuen Ausgabedateinamen, damit eine ältere PDF-Datei nicht mit der neuesten Konvertierung verwechselt werden kann.
Prüfen Sie, ob die Ausgabedatei existiert und als PDF erkannt wird, und überprüfen Sie anschließend die Seiten auf Layoutänderungen.
Was sollte ich überprüfen, wenn die Konvertierung fehlschlägt?
Keine Ausgabedatei: Bitte überprüfen Sie den Quelldateinamen und den Containerpfad, ob der Container inputunter <Pfad> eingebunden wurde /inputund ob das outputHostverzeichnis für den ausgewählten Benutzer beschreibbar ist.
Profil- oder Sperrfehler: Prüfen Sie, ob der -env:UserInstallationPfad beschreibbar ist. Verwenden Sie für jeden gleichzeitig laufenden LibreOffice-Prozess ein separates Profilverzeichnis.
Geändertes Layout: Installieren Sie die benötigten Schriftarten aus dem Bild und überprüfen Sie die PDF-Datei. Die Darstellung kann aufgrund der Verfügbarkeit von Schriftarten, Exportfiltern und Versionsunterschieden von der eines Desktop-Systems abweichen.
Docker-Mount-Fehler: Überprüfen Sie, ob beide Host-Verzeichnisse existieren, bevor Sie -voder verwenden --mount, und überprüfen Sie, ob der Daemon darauf zugreifen kann.