2026-09-24 14:47:45 UTC
1.1 GB
true
DBUS_SESSION_BUS_ADDRESS/dev/null
DEBIAN_FRONTENDnoninteractive
FAT_DOCKERtrue
FORMDETECTION_PREINSTALLEDMODELDIR/opt/stirling/preinstalled-models
HOME/home/stirlingpdfuser
INSTALL_BOOK_AND_ADVANCED_HTML_OPSfalse
JAVA_CUSTOM_OPTS JAVA_HOME/opt/java/openjdk
JAVA_VERSIONjdk-25.0.4+7
LANGC.UTF-8
LANGUAGEen_US:en
LC_ALLC.UTF-8
PATH/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PGID1000
PUID1000
SAL_TMP/tmp/stirling-pdf/libre
STIRLING_AOT_ENABLEfalse
STIRLING_ENGINE_HOME/opt/stirling-engine
STIRLING_ENGINE_PORT5001
STIRLING_ENGINE_WORKERS2
STIRLING_TEMPFILES_DIRECTORY/tmp/stirling-pdf
TEMP/tmp/stirling-pdf
TESS_BASE_PATH/usr/share/tesseract-ocr/5/tessdata
TMP/tmp/stirling-pdf
TMPDIR/tmp/stirling-pdf
UMASK022
VERSION_TAG3.0.0
_JVM_OPTS-XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/configs/heap_dumps -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational -XX:ShenandoahGCHeuristics=adaptive -XX:ShenandoahUncommitDelay=1000 -XX:ShenandoahGuaranteedYoungGCInterval=10000 -XX:ShenandoahGuaranteedOldGCInterval=30000 -XX:+UseCompactObjectHeaders -XX:+UseStringDeduplication -XX:+ExplicitGCInvokesConcurrent -XX:ReservedCodeCacheSize=96m -XX:CICompilerCount=2 -Dspring.threads.virtual.enabled=true -Djava.awt.headless=true
[#000] sha256:0926a8eb0e608a5c6888d1cd5594184bdf3ed3aa311dba5b42a547caefdc6f2e - 2.52% (28.4 MB)
[#001] sha256:fe860d81cd49b3b4e6736f841a56605ac315b6061ca1fa0aa36201b3f470f0a8 - 0.97% (10.9 MB)
[#002] sha256:2f9b4977682d696b24ee33229e1cb3bee4b674ebf368026218f3ee759aad09a0 - 5.35% (60.2 MB)
[#003] sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 - 0.0% (32 Bytes)
[#004] sha256:1acd3d9c2420115ce6b7aaf5de44855ff9a8f624aa2a0d9e142040f5158ee4a5 - 0.0% (2.41 KB)
[#005] sha256:e9a1752a4c1736cf98c1b50b720596226cc1a8e4e23809954ed8d75db5e7c9d6 - 26.05% (293 MB)
[#006] sha256:0cf8bb2d84adc48eae1c761be1c59c19843b142559d15eff108de12ab2dc0b65 - 15.72% (177 MB)
[#007] sha256:6076068cdbc7a31aad17d6f2355cdd526136685f91034e68f4b73ae75c48baf7 - 0.11% (1.21 MB)
[#008] sha256:3358661e66a21a7767164804c3ba037df65260e480b988b3438944a5f8be2ef2 - 0.24% (2.68 MB)
[#009] sha256:461d2aa99701df8d72de00af4a689460310349988a32b8afc925bbfa9e94cb6c - 1.41% (15.9 MB)
[#010] sha256:aadaf83da40620c324d661d1032796456fc00ed9bcff8975a08f4d24fbe761a3 - 0.02% (235 KB)
[#011] sha256:6c170ad9c9763ad2228ae98ace26cbe93826c33b9d4f3ac8561978c66861856e - 10.2% (115 MB)
[#012] sha256:6f9558332e9f11aaa749cbe65c07076775c8f6aa7e30ac09c3a1da740d1bcaed - 0.0% (15.6 KB)
[#013] sha256:12055b1629277ba609f92fe4563d2d0810b70b81ad4949cc92b396ddf6450536 - 0.0% (3.62 KB)
[#014] sha256:d146129105b3481c6c1795d90a76c4471bd8da8a1a4f4949c10fa23e5edb1ee8 - 0.0% (3.71 KB)
[#015] sha256:3700013bff643767d690abbcc6cba6ed17c34325bacb134169c5189089e6c4d7 - 0.0% (302 Bytes)
[#016] sha256:b13ab97a95f1c0e0e65c02c19a82d24bc3ebceefc10aeeb4db4d8d195930faec - 0.0% (50.4 KB)
[#017] sha256:51b7e378f495f98f6742801e4e7cfd0ec6f94bfc8d9dca6f6c3c716ff9b78890 - 0.0% (5.37 KB)
[#018] sha256:b474706ba1e6d29fbf6935cf848550d87b6544ece29a55bfde428989a51effea - 0.0% (764 Bytes)
[#019] sha256:fc9abb4a5b72547881ed6623c03c1849235564d068735906cac49c8b8c2f2088 - 0.0% (711 Bytes)
[#020] sha256:740c56f09a482feaff3b0be9de2c0a5bb80866c070410da53167ffa9c4baa455 - 0.02% (256 KB)
[#021] sha256:7a51a0afa2a7bd34bec8841b6d362089e61b9deb4812538964667100b765f769 - 0.0% (91 Bytes)
[#022] sha256:03ba20e82b23d18acf9611efa91d006fa2ec3304845d3f12c9601a36db760b5c - 16.38% (184 MB)
[#023] sha256:4fe5b1d8754c365332beea0388f7b88e6248980455c9087c160872e9b26dd2d0 - 0.0% (96 Bytes)
[#024] sha256:4fe5b1d8754c365332beea0388f7b88e6248980455c9087c160872e9b26dd2d0 - 0.0% (96 Bytes)
[#025] sha256:8aa281966a9e8e4ab9c5f3e2fbff1358fcc2de3fe805dc8a87910f2f4f493c6e - 11.7% (132 MB)
[#026] sha256:c56b440b5fab413b9e9ebd9e705b9751ed4034f98b95ee7bb4595d9b91aefec5 - 0.0% (3.28 KB)
[#027] sha256:c60c80fcb02572457d0f39e4e602ce1d3931a558db37cf6bda65da51e5767871 - 0.01% (143 KB)
[#028] sha256:11822bbe6f72f90f66d3e62f8955e9987f3b9be33cd47d89bf7fed39f5e33001 - 2.67% (30 MB)
[#029] sha256:3d886f1c50c0aa9280f7a2c051414e51b6da35edde77dbdce09fef22b5cbf818 - 1.62% (18.2 MB)
[#030] sha256:5a6f7c3c459ceb13ff116eb3d15cabe77be4073d7d80a8a7e776882fd7f525e2 - 0.0% (2.39 KB)
[#031] sha256:0bb288513a7605a25da09389445dc04f98aa25b7252f11394f93dd9722d88519 - 0.01% (156 KB)
[#032] sha256:1ec15fa41b24477c08a9451929f53a41743b215b58e15bab30a0271f80c566b4 - 2.26% (25.5 MB)
[#033] sha256:b13d7755586198814aecd9c8baf639b946c83b7e3a8d591a50b63dcd2a67d61d - 2.71% (30.5 MB)
[#034] sha256:7c1086be58f40100f3888a9c7a5a91d7bb37a349e8267164762f0791897bf817 - 0.01% (125 KB)
[#035] sha256:2d230d23709eed87945d53cb3cdda51ca3ce7d07e3af7a70a086d1985e55ce1c - 0.0% (147 Bytes)
/bin/sh -c #(nop) ARG RELEASE
2026-08-17 13:09:48 UTC/bin/sh -c #(nop) ARG LAUNCHPAD_BUILD_ARCH
2026-08-17 13:09:48 UTC/bin/sh -c #(nop) LABEL org.opencontainers.image.version=24.04
2026-08-17 13:09:50 UTC/bin/sh -c #(nop) ADD file:cb9335ce6f27399c2b17787739d6675502767c53e0335ded2a5f0d003d996650 in /
2026-08-17 13:09:51 UTC/bin/sh -c #(nop) CMD ["/bin/bash"]
2026-08-21 18:26:21 UTC (buildkit.dockerfile.v0)ENV JAVA_HOME=/opt/java/openjdk
2026-08-21 18:26:21 UTC (buildkit.dockerfile.v0)ENV PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
2026-08-21 18:26:21 UTC (buildkit.dockerfile.v0)ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
2026-08-21 18:26:21 UTC (buildkit.dockerfile.v0)RUN /bin/sh -c set -eux; apt-get update; DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends fontconfig ca-certificates p11-kit tzdata locales ; echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen; locale-gen en_US.UTF-8; rm -rf /var/lib/apt/lists/* # buildkit
2026-08-21 18:26:21 UTC (buildkit.dockerfile.v0)ENV JAVA_VERSION=jdk-25.0.4+7
2026-08-21 18:26:33 UTC (buildkit.dockerfile.v0)RUN /bin/sh -c set -eux; ARCH="$(dpkg --print-architecture)"; case "${ARCH}" in amd64) ESUM='aed3915f8facc0c80733ab2448bb0df4b494a36a2c5759e9a6e1eb979720f2b3'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.4%2B7/OpenJDK25U-jre_x64_linux_hotspot_25.0.4_7.tar.gz'; ;; arm64) ESUM='1f2644427000316bc431df3389504551ed7464fe8486bf6b4f1130af9ffc8f55'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.4%2B7/OpenJDK25U-jre_aarch64_linux_hotspot_25.0.4_7.tar.gz'; ;; ppc64el) ESUM='7c4235dc156e85d4e8b7b12075d7d72265fa49b73af2d0453d118a4786176476'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.4%2B7/OpenJDK25U-jre_ppc64le_linux_hotspot_25.0.4_7.tar.gz'; ;; riscv64) ESUM='ee3e62f50e2bdd5b65f9f8937b33d862846d0245bc1be0dd8e3a99ea10fce32a'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.4%2B7/OpenJDK25U-jre_riscv64_linux_hotspot_25.0.4_7.tar.gz'; ;; s390x) ESUM='7698a64e995bf41cb2620bea225b6383e66a8b76a0b97ea04db89e300c470ed8'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.4%2B7/OpenJDK25U-jre_s390x_linux_hotspot_25.0.4_7.tar.gz'; ;; *) echo "Unsupported arch: ${ARCH}"; exit 1; ;; esac; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no-install-recommends wget gnupg; wget --progress=dot:giga -O /tmp/openjdk.tar.gz ${BINARY_URL}; wget --progress=dot:giga -O /tmp/openjdk.tar.gz.sig ${BINARY_URL}.sig; export GNUPGHOME="$(mktemp -d)"; gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 3B04D753C9050D9A5D343F39843C48A565F8F04B; gpg --batch --verify /tmp/openjdk.tar.gz.sig /tmp/openjdk.tar.gz; rm -rf "${GNUPGHOME}" /tmp/openjdk.tar.gz.sig; echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; mkdir -p "$JAVA_HOME"; tar --extract --file /tmp/openjdk.tar.gz --directory "$JAVA_HOME" --strip-components 1 --no-same-owner ; rm -f /tmp/openjdk.tar.gz; apt-mark auto '.*' > /dev/null; apt-mark manual $savedAptMark > /dev/null; apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; rm -rf /var/lib/apt/lists/*; find "$JAVA_HOME/lib" -name '*.so' -exec dirname '{}' ';' | sort -u > /etc/ld.so.conf.d/docker-openjdk.conf; ldconfig; java -Xshare:dump; # buildkit
2026-08-21 18:26:33 UTC (buildkit.dockerfile.v0)RUN /bin/sh -c set -eux; echo "Verifying install ..."; echo "java --version"; java --version; echo "Complete." # buildkit
2026-08-21 18:26:33 UTC (buildkit.dockerfile.v0)COPY --chmod=755 entrypoint.sh /__cacert_entrypoint.sh # buildkit
2026-08-21 18:26:33 UTC (buildkit.dockerfile.v0)ENTRYPOINT ["/__cacert_entrypoint.sh"]
2026-09-23 10:45:36 UTC (buildkit.dockerfile.v0)SHELL [/bin/bash -o pipefail -c]
2026-09-23 10:45:36 UTC (buildkit.dockerfile.v0)ENV DEBIAN_FRONTEND=noninteractive LANG=C.UTF-8 LC_ALL=C.UTF-8 TESS_BASE_PATH=/usr/share/tesseract-ocr/5/tessdata
2026-09-23 10:45:36 UTC (buildkit.dockerfile.v0)ARG UNOSERVER_VERSION=3.7
2026-09-23 10:45:36 UTC (buildkit.dockerfile.v0)RUN |1 UNOSERVER_VERSION=3.7 /bin/bash -o pipefail -c set -eux; apt-get update; apt-get install -y --no-install-recommends software-properties-common; add-apt-repository -y ppa:libreoffice/ppa; apt-get update; apt-get install -y --no-install-recommends ca-certificates tzdata tini bash fontconfig curl poppler-utils fontforge unpaper pngquant fonts-dejavu fonts-liberation2 fonts-crosextra-caladea fonts-crosextra-carlito fonts-noto-core fonts-noto-mono fonts-noto-extra fonts-noto-cjk poppler-data fonts-freefont-ttf fonts-terminus python3 python3-uno python3-packaging tesseract-ocr tesseract-ocr-eng tesseract-ocr-deu tesseract-ocr-fra tesseract-ocr-por tesseract-ocr-chi-sim tesseract-ocr-osd libcairo2 libpango-1.0-0 libpangoft2-1.0-0 libgdk-pixbuf-2.0-0 libfreetype6 libfontconfig1 libx11-6 libxt6 libxext6 libxrender1 libxtst6 libxi6 libxinerama1 libxkbcommon0 libsm6 libice6 libegl1 libgl1 libopengl0 libdbus-1-3 libglib2.0-0 libnss3 libasound2t64 libxcomposite1 libxrandr2 xvfb x11-utils coreutils libreoffice-writer-nogui libreoffice-calc-nogui libreoffice-impress-nogui libreoffice-draw-nogui libreoffice-base-nogui libreoffice-java-common ; libreoffice --version; soffice --version 2>/dev/null || true; /usr/lib/libreoffice/program/soffice.bin --headless --convert-to pdf /dev/null 2>/dev/null || true; fc-cache -f -v 2>&1 | awk 'NR <= 20'; apt-get remove --purge -y software-properties-common || true; apt-get autoremove --purge -y || true; rm -rf /var/lib/apt/lists/*; rm -rf /usr/share/doc/* /usr/share/man/* /usr/share/info/* /usr/share/lintian/* /usr/share/linda/* /usr/share/icons/* /usr/share/themes/* /usr/share/javascript/* /usr/share/gtk-3.0/* /usr/share/fontforge/pixmaps /usr/share/fontforge/osx /usr/share/fontforge/cidmap /usr/share/fontforge/prefs /usr/share/liblangtag/* /usr/share/tcltk/* /usr/share/python-wheels/* /usr/share/glib-2.0/schemas/* /usr/share/mime/* /usr/share/xml/iso-codes /usr/share/GConf /usr/share/bash-completion /usr/share/zsh /usr/share/libmysofa /usr/share/alsa /usr/share/iso-codes /usr/share/perl5 /usr/share/libthai /usr/share/libexttextcat /usr/share/openal /usr/share/gcc; find /usr/share/locale -mindepth 1 -maxdepth 1 -type d ! -name 'en*' -exec rm -rf {} + 2>/dev/null || true; rm -rf /usr/share/i18n/locales /usr/share/i18n/charmaps; rm -rf /usr/lib/libreoffice/share/gallery /usr/lib/libreoffice/share/template /usr/lib/libreoffice/share/wizards /usr/lib/libreoffice/share/autotext /usr/lib/libreoffice/help /usr/lib/libreoffice/share/config/images_*.zip /usr/lib/libreoffice/share/basic /usr/lib/libreoffice/share/Scripts /usr/lib/libreoffice/share/autocorr /usr/lib/libreoffice/share/classification /usr/lib/libreoffice/share/wordbook /usr/lib/libreoffice/share/fingerprint /usr/lib/libreoffice/share/xdg /usr/lib/libreoffice/share/numbertext /usr/lib/libreoffice/share/shell /usr/lib/libreoffice/share/palette /usr/lib/libreoffice/share/theme_definitions /usr/lib/libreoffice/share/xslt /usr/lib/libreoffice/share/labels /usr/lib/libreoffice/share/dtd /usr/lib/libreoffice/share/tipoftheday /usr/lib/libreoffice/share/toolbarmode /usr/lib/libreoffice/share/psprint /usr/lib/libreoffice/CREDITS.fodt /usr/lib/libreoffice/LICENSE.html; rm -rf /usr/lib/libreoffice/share/extensions/wiki-publisher /usr/lib/libreoffice/share/extensions/nlpsolver /usr/lib/libreoffice/share/extensions/dict-* 2>/dev/null || true; rm -rf /usr/lib/libreoffice/program/libdba* /usr/lib/libreoffice/program/libdbahsql* /usr/lib/libreoffice/program/libdbu* /usr/lib/libreoffice/program/libreport* 2>/dev/null || true; rm -rf /usr/lib/python3.12/test /usr/lib/python3.12/idlelib /usr/lib/python3.12/tkinter /usr/lib/python3.12/lib2to3 /usr/lib/python3.12/pydoc_data; rm -rf /usr/lib/python3/dist-packages/scipy /usr/lib/python3/dist-packages/sympy /usr/lib/python3/dist-packages/mpmath; rm -rf /usr/lib/python3/dist-packages/cffi /usr/lib/python3/dist-packages/cffi-*.dist-info /usr/lib/python3/dist-packages/_cffi_backend*.so /usr/lib/python3/dist-packages/_cffi_backend*.cpython*.so 2>/dev/null || true; find /usr/lib -name '*.so*' -type f -not -path '*/jvm/*' -not -path '*/libreoffice/*' -exec strip --strip-unneeded {} + 2>/dev/null || true; MULTIARCH_LIBDIR=$(dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null || find /usr/lib -maxdepth 1 -type d -name '*-linux-gnu' | head -1); rm -f "${MULTIARCH_LIBDIR}"/libLLVM*.so* "${MULTIARCH_LIBDIR}"/libgallium*.so* 2>/dev/null || true; find /usr/lib/python3* -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true; find /usr/lib/python3* \( -name '*.pyc' -o -name '*.pyi' \) -delete 2>/dev/null || true; rm -rf /usr/share/bug /usr/share/lintian /usr/share/linda /var/lib/dpkg/info/*.list /var/lib/dpkg/info/*.md5sums /var/lib/dpkg/info/*.conffiles /var/lib/dpkg/info/*.postinst /var/lib/dpkg/info/*.preinst /var/lib/dpkg/info/*.prerm /var/lib/dpkg/info/*.postrm /var/lib/dpkg/info/*.triggers /var/lib/dpkg/info/*.shlibs /var/lib/dpkg/info/*.symbols /var/lib/dpkg/info/*.templates /var/log/dpkg.log /var/log/apt/* /usr/local/share/ghostscript/*/doc /usr/local/share/ghostscript/*/examples /usr/share/ImageMagick-*/doc /usr/share/ImageMagick-*/www; rm -rf /usr/share/tesseract-ocr/*/tessdata/tessconfigs; find /usr/share/fonts/truetype/noto -type f ! -name '*Regular*' -delete 2>/dev/null || true; find /usr/share/fonts/opentype -type f ! -name '*Regular*' -delete 2>/dev/null || true; find /usr/share/fonts/truetype -name '*DejaVu*' ! -name '*-Regular*' ! -name '*-Bold*' ! -name '*Bold.ttf' ! -name 'DejaVuSans.ttf' ! -name 'DejaVuSerif.ttf' ! -name 'DejaVuSansMono.ttf' -type f -delete 2>/dev/null || true; find /usr/share/fonts -type d -empty -delete 2>/dev/null || true; GCONV_DIR=$(find /usr/lib -type d -name gconv 2>/dev/null | head -1); if [ -n "$GCONV_DIR" ] && [ -d "$GCONV_DIR" ]; then mkdir -p /tmp/gconv-keep; for mod in UTF-8.so UTF-16.so UTF-32.so UTF-7.so ISO8859-1.so ISO8859-15.so ISO8859-2.so ISO8859-9.so UNICODE.so CP1252.so CP1251.so CP1250.so EUC-JP.so EUC-KR.so EUC-CN.so SHIFT_JIS.so GB18030.so BIG5.so gconv-modules gconv-modules.d gconv-modules.cache; do [ -e "$GCONV_DIR/$mod" ] && cp -a "$GCONV_DIR/$mod" /tmp/gconv-keep/ 2>/dev/null || true; done; rm -rf "$GCONV_DIR"/*; cp -a /tmp/gconv-keep/* "$GCONV_DIR/" 2>/dev/null || true; rm -rf /tmp/gconv-keep; fi; rm -rf /var/cache/fontconfig/* /tmp/* # buildkit
2026-09-23 11:01:36 UTC (buildkit.dockerfile.v0)COPY /opt/calibre /opt/calibre # buildkit
2026-09-23 10:54:30 UTC (buildkit.dockerfile.v0)COPY /usr/local/bin/qpdf /usr/bin/qpdf # buildkit
2026-09-23 10:54:31 UTC (buildkit.dockerfile.v0)COPY /magick-export/ / # buildkit
2026-09-23 11:00:28 UTC (buildkit.dockerfile.v0)COPY /usr/local/bin/gs /usr/local/bin/gs # buildkit
2026-09-22 23:54:55 UTC (buildkit.dockerfile.v0)COPY /usr/local/share/ghostscript /usr/local/share/ghostscript # buildkit
2026-09-23 10:43:33 UTC (buildkit.dockerfile.v0)COPY /opt/venv /opt/venv # buildkit
2026-09-23 11:01:39 UTC (buildkit.dockerfile.v0)RUN |1 UNOSERVER_VERSION=3.7 /bin/bash -o pipefail -c ldconfig /usr/local/lib && PYTHONDONTWRITEBYTECODE=1 /opt/venv/bin/python -c "import cffi; print('cffi OK:', cffi.__version__)" && PYTHONDONTWRITEBYTECODE=1 /opt/venv/bin/python -c "import cv2; print('OpenCV', cv2.__version__)" && PYTHONDONTWRITEBYTECODE=1 /opt/venv/bin/python -c "import ocrmypdf; print('ocrmypdf OK')" && find /opt/venv -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true # buildkit
2026-09-23 11:01:39 UTC (buildkit.dockerfile.v0)ARG PUID=1000
2026-09-23 11:01:39 UTC (buildkit.dockerfile.v0)ARG PGID=1000
2026-09-23 11:01:40 UTC (buildkit.dockerfile.v0)RUN |3 UNOSERVER_VERSION=3.7 PUID=1000 PGID=1000 /bin/bash -o pipefail -c set -eux; if ! getent group stirlingpdfgroup >/dev/null 2>&1; then groupadd -g "${PGID}" stirlingpdfgroup 2>/dev/null || groupadd stirlingpdfgroup; fi; if ! id -u stirlingpdfuser >/dev/null 2>&1; then useradd -m -u "${PUID}" -g stirlingpdfgroup -d /home/stirlingpdfuser -s /bin/bash stirlingpdfuser 2>/dev/null || useradd -m -g stirlingpdfgroup -d /home/stirlingpdfuser -s /bin/bash stirlingpdfuser; fi # buildkit
2026-09-23 11:01:40 UTC (buildkit.dockerfile.v0)RUN |3 UNOSERVER_VERSION=3.7 PUID=1000 PGID=1000 /bin/bash -o pipefail -c set -eux; if ! getent group stirlingofficegroup >/dev/null 2>&1; then groupadd -g 1100 stirlingofficegroup 2>/dev/null || groupadd stirlingofficegroup; fi; if ! id -u stirlingofficeuser >/dev/null 2>&1; then useradd -m -u 1100 -g stirlingofficegroup -d /home/stirlingofficeuser -s /usr/sbin/nologin stirlingofficeuser 2>/dev/null || useradd -m -g stirlingofficegroup -d /home/stirlingofficeuser -s /usr/sbin/nologin stirlingofficeuser; fi; mkdir -p /var/lib/libreoffice-sandbox; chown stirlingofficeuser:stirlingofficegroup /home/stirlingofficeuser /var/lib/libreoffice-sandbox; chmod 700 /var/lib/libreoffice-sandbox # buildkit
2026-09-23 11:01:40 UTC (buildkit.dockerfile.v0)RUN |3 UNOSERVER_VERSION=3.7 PUID=1000 PGID=1000 /bin/bash -o pipefail -c set -eux; mkdir -p /configs /configs/cache /configs/heap_dumps /logs /customFiles /pipeline/watchedFolders /pipeline/finishedFolders /storage /tmp/stirling-pdf/heap_dumps; chown -R stirlingpdfuser:stirlingpdfgroup /home/stirlingpdfuser /configs /logs /customFiles /pipeline /storage /tmp/stirling-pdf; chmod 750 /tmp/stirling-pdf; chmod 750 /tmp/stirling-pdf/heap_dumps # buildkit
2026-09-23 11:01:43 UTC (buildkit.dockerfile.v0)RUN |3 UNOSERVER_VERSION=3.7 PUID=1000 PGID=1000 /bin/bash -o pipefail -c set -eux; ln -sf /opt/calibre/ebook-convert /usr/bin/ebook-convert; ln -sf /opt/venv/bin/unoconvert /usr/local/bin/unoconvert; ln -sf /opt/venv/bin/unoserver /usr/local/bin/unoserver; ln -sf /opt/venv/bin/ocrmypdf /usr/local/bin/ocrmypdf; ln -sf /opt/venv/bin/weasyprint /usr/local/bin/weasyprint; ln -sf /opt/venv/bin/unoping /usr/local/bin/unoping; fc-cache -f # buildkit
2026-09-23 11:55:31 UTC (buildkit.dockerfile.v0)COPY /usr/local/bin/lo-sandbox /usr/local/lib/stirling/lo-sandbox # buildkit
2026-09-23 11:55:31 UTC (buildkit.dockerfile.v0)COPY stirling-hardening.xcd /usr/lib/libreoffice/share/registry/stirling-hardening.xcd # buildkit
2026-09-23 11:55:31 UTC (buildkit.dockerfile.v0)COPY unoserver-pipe-transport.py /usr/local/lib/stirling/unoserver-pipe-transport.py # buildkit
2026-09-23 11:55:31 UTC (buildkit.dockerfile.v0)RUN |3 UNOSERVER_VERSION=3.7 PUID=1000 PGID=1000 /bin/bash -o pipefail -c set -eux; chown root:root /usr/local/lib/stirling/lo-sandbox /usr/lib/libreoffice/share/registry/stirling-hardening.xcd; chmod 0755 /usr/local/lib/stirling/lo-sandbox; chmod 0644 /usr/lib/libreoffice/share/registry/stirling-hardening.xcd; for name in /usr/bin/soffice /usr/bin/libreoffice /usr/bin/ooffice; do if [ -e "$name" ] || [ -L "$name" ]; then rm -f "$name"; fi; cp /usr/local/lib/stirling/lo-sandbox "$name"; chown root:root "$name"; chmod 0755 "$name"; done; /opt/venv/bin/python /usr/local/lib/stirling/unoserver-pipe-transport.py "$(/opt/venv/bin/python -c 'import unoserver, os; print(os.path.dirname(unoserver.__file__))')"; STIRLING_LO_SANDBOX=off /usr/bin/soffice --version # buildkit
2026-09-23 11:55:31 UTC (buildkit.dockerfile.v0)LABEL org.opencontainers.image.title=Stirling-PDF Base org.opencontainers.image.description=Pre-built base image with Calibre, Ghostscript, QPDF, ImageMagick, LibreOffice, OCRmyPDF and dependencies org.opencontainers.image.source=https://github.com/Stirling-Tools/Stirling-PDF org.opencontainers.image.licenses=MIT org.opencontainers.image.vendor=Stirling-Tools org.opencontainers.image.url=https://www.stirlingpdf.com org.opencontainers.image.documentation=https://docs.stirlingpdf.com maintainer=Stirling-Tools org.opencontainers.image.authors=Stirling-Tools
2026-09-24 07:46:40 UTC (buildkit.dockerfile.v0)ARG VERSION_TAG=3.0.0
2026-09-24 07:46:40 UTC (buildkit.dockerfile.v0)WORKDIR /app
2026-09-24 14:47:41 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /layers/dependencies/ /app/ # buildkit
2026-09-24 14:47:40 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /layers/spring-boot-loader/ /app/ # buildkit
2026-09-24 14:47:40 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /layers/snapshot-dependencies/ /app/ # buildkit
2026-09-24 14:47:40 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /layers/application/ /app/ # buildkit
2026-09-24 14:47:22 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /app/build/libs/restart-helper.jar /restart-helper.jar # buildkit
2026-09-24 14:47:22 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 scripts/ /scripts/ # buildkit
2026-09-24 14:40:15 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /opt/stirling-engine/python /opt/stirling-engine/python # buildkit
2026-09-24 14:40:15 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /opt/stirling-engine/.venv /opt/stirling-engine/.venv # buildkit
2026-09-24 14:39:59 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 engine/.env /opt/stirling-engine/.env # buildkit
2026-09-24 14:39:59 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 engine/src/ /opt/stirling-engine/src/ # buildkit
2026-09-24 14:47:22 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /preinstalled-models/ /opt/stirling/preinstalled-models/ # buildkit
2026-09-24 14:47:43 UTC (buildkit.dockerfile.v0)COPY app/core/src/main/resources/static/fonts/*.ttf /usr/share/fonts/truetype/ # buildkit
2026-09-24 14:47:45 UTC (buildkit.dockerfile.v0)RUN |1 VERSION_TAG=3.0.0 /bin/bash -o pipefail -c set -eux; chmod +x /scripts/*; ln -s /logs /app/logs; ln -s /configs /app/configs; ln -s /customFiles /app/customFiles; ln -s /pipeline /app/pipeline; ln -s /storage /app/storage; chown -h stirlingpdfuser:stirlingpdfgroup /app/logs /app/configs /app/customFiles /app/pipeline /app/storage; chown stirlingpdfuser:stirlingpdfgroup /app; mkdir -p /opt/stirling-engine/data; chown -R stirlingpdfuser:stirlingpdfgroup /opt/stirling-engine/data; chmod 750 /tmp/stirling-pdf; chmod 750 /tmp/stirling-pdf/heap_dumps; fc-cache -f # buildkit
2026-09-24 14:47:45 UTC (buildkit.dockerfile.v0)RUN |1 VERSION_TAG=3.0.0 /bin/bash -o pipefail -c echo "${VERSION_TAG:-dev}" > /etc/stirling_version # buildkit
2026-09-24 14:47:45 UTC (buildkit.dockerfile.v0)ENV VERSION_TAG=3.0.0 FORMDETECTION_PREINSTALLEDMODELDIR=/opt/stirling/preinstalled-models STIRLING_AOT_ENABLE=false _JVM_OPTS=-XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/configs/heap_dumps -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational -XX:ShenandoahGCHeuristics=adaptive -XX:ShenandoahUncommitDelay=1000 -XX:ShenandoahGuaranteedYoungGCInterval=10000 -XX:ShenandoahGuaranteedOldGCInterval=30000 -XX:+UseCompactObjectHeaders -XX:+UseStringDeduplication -XX:+ExplicitGCInvokesConcurrent -XX:ReservedCodeCacheSize=96m -XX:CICompilerCount=2 -Dspring.threads.virtual.enabled=true -Djava.awt.headless=true JAVA_CUSTOM_OPTS= HOME=/home/stirlingpdfuser PUID=1000 PGID=1000 UMASK=022 FAT_DOCKER=true AIENGINE_ENABLED=true STIRLING_ENGINE_HOME=/opt/stirling-engine STIRLING_ENGINE_PORT=5001 STIRLING_ENGINE_WORKERS=2 INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false STIRLING_TEMPFILES_DIRECTORY=/tmp/stirling-pdf TMPDIR=/tmp/stirling-pdf TEMP=/tmp/stirling-pdf TMP=/tmp/stirling-pdf DBUS_SESSION_BUS_ADDRESS=/dev/null SAL_TMP=/tmp/stirling-pdf/libre
2026-09-24 14:47:45 UTC (buildkit.dockerfile.v0)LABEL org.opencontainers.image.title=Stirling-PDF Fat org.opencontainers.image.description=Fat version with extra fonts for air-gapped environments, includes Calibre, LibreOffice, Tesseract, OCRmyPDF org.opencontainers.image.source=https://github.com/Stirling-Tools/Stirling-PDF org.opencontainers.image.licenses=MIT org.opencontainers.image.vendor=Stirling-Tools org.opencontainers.image.url=https://www.stirlingpdf.com org.opencontainers.image.documentation=https://docs.stirlingpdf.com maintainer=Stirling-Tools org.opencontainers.image.authors=Stirling-Tools org.opencontainers.image.version=3.0.0 org.opencontainers.image.keywords=PDF, manipulation, fat, air-gapped, API, Spring Boot, React
2026-09-24 14:47:45 UTC (buildkit.dockerfile.v0)EXPOSE [8080/tcp]
2026-09-24 14:47:45 UTC (buildkit.dockerfile.v0)STOPSIGNAL SIGTERM
2026-09-24 14:47:45 UTC (buildkit.dockerfile.v0)HEALTHCHECK {Test:[CMD-SHELL curl -fs --max-time 10 http://localhost:8080${SYSTEM_ROOTURIPATH:-''}/api/v1/info/status || exit 1] Interval:30s Timeout:15s StartPeriod:2m0s StartInterval:0s Retries:5}
2026-09-24 14:47:45 UTC (buildkit.dockerfile.v0)ENTRYPOINT ["tini" "--" "/scripts/init.sh"]
2026-09-24 14:47:45 UTC (buildkit.dockerfile.v0)CMD []
2026-09-24 15:02:04 UTC
1.07 GB
true
DBUS_SESSION_BUS_ADDRESS/dev/null
DEBIAN_FRONTENDnoninteractive
FAT_DOCKERtrue
FORMDETECTION_PREINSTALLEDMODELDIR/opt/stirling/preinstalled-models
HOME/home/stirlingpdfuser
INSTALL_BOOK_AND_ADVANCED_HTML_OPSfalse
JAVA_CUSTOM_OPTS JAVA_HOME/opt/java/openjdk
JAVA_VERSIONjdk-25.0.4+7
LANGC.UTF-8
LANGUAGEen_US:en
LC_ALLC.UTF-8
PATH/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PGID1000
PUID1000
SAL_TMP/tmp/stirling-pdf/libre
STIRLING_AOT_ENABLEfalse
STIRLING_ENGINE_HOME/opt/stirling-engine
STIRLING_ENGINE_PORT5001
STIRLING_ENGINE_WORKERS2
STIRLING_TEMPFILES_DIRECTORY/tmp/stirling-pdf
TEMP/tmp/stirling-pdf
TESS_BASE_PATH/usr/share/tesseract-ocr/5/tessdata
TMP/tmp/stirling-pdf
TMPDIR/tmp/stirling-pdf
UMASK022
VERSION_TAG3.0.0
_JVM_OPTS-XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/configs/heap_dumps -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational -XX:ShenandoahGCHeuristics=adaptive -XX:ShenandoahUncommitDelay=1000 -XX:ShenandoahGuaranteedYoungGCInterval=10000 -XX:ShenandoahGuaranteedOldGCInterval=30000 -XX:+UseCompactObjectHeaders -XX:+UseStringDeduplication -XX:+ExplicitGCInvokesConcurrent -XX:ReservedCodeCacheSize=96m -XX:CICompilerCount=2 -Dspring.threads.virtual.enabled=true -Djava.awt.headless=true
[#000] sha256:0b613318ea879878918380aa3aeb220dfe824e311b83bc955cb8a1d4319650ab - 2.52% (27.5 MB)
[#001] sha256:51b4386bd70c2954b2582a2981aa1e49491827ee714eab8c29eaab2a9b353052 - 1.0% (10.9 MB)
[#002] sha256:dfb95e3836e0c5e3b34139686fd2e946b7a0af413c997a45fc2d6fd038335b0e - 5.39% (59.1 MB)
[#003] sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 - 0.0% (32 Bytes)
[#004] sha256:8da00c517fa718e5b9e470c462fee10e7bf750b4bb9e76a32e451b66e0864c74 - 0.0% (2.41 KB)
[#005] sha256:7b9356429150a84379da080e5c9b58d6e612b0b73906367b5b1655e30c9a617d - 26.08% (286 MB)
[#006] sha256:3256da2b66aea9213f34c11a51c4022a8497ab8e32e443c0394c6de157239888 - 15.68% (172 MB)
[#007] sha256:f00b63a50ebcdc12bf24b547932e3ad5b5543baddf3f524bc29c4167b4720a9f - 0.1% (1.14 MB)
[#008] sha256:3d5aa4682dafefb51077f77c445611a258f36ebdfa63f4b28a66c7a044bade6d - 0.24% (2.67 MB)
[#009] sha256:68adba45bbf58bbb0e1c874b980330e60d91add10ac85727b5cb8d4837ac46bf - 1.44% (15.8 MB)
[#010] sha256:aadaf83da40620c324d661d1032796456fc00ed9bcff8975a08f4d24fbe761a3 - 0.02% (235 KB)
[#011] sha256:ad45b476c148a7379132e8c9333c293b9609c2deb08f3a045eb8ed7c6faaada4 - 8.44% (92.4 MB)
[#012] sha256:d7e0a5ffc964722fcb53b571a7834a775e757f2b5e6bf7a035132bdad28062e4 - 0.0% (14.8 KB)
[#013] sha256:51b7dd2638ea2f6309056b58279baada4891d51d3572b096140ea01c49e6378c - 0.0% (3.61 KB)
[#014] sha256:7073056fa9a02c077649aa7ee09769c5f46bf4fddc56fc547242a7cfa39fdab9 - 0.0% (3.72 KB)
[#015] sha256:4d2389c2678f03b18d2b310de4b3085fcee340d9ea2c5b035bf36bda3935dfac - 0.0% (302 Bytes)
[#016] sha256:ce7cbd4c682bc4e214c84e353c474b46172bb174cff368c5a4b0ad38b55f0ca6 - 0.0% (50.4 KB)
[#017] sha256:70e9618a1760efe8a7a82317c261454e3c80835acd856bb1496c02e236491f97 - 0.0% (5.54 KB)
[#018] sha256:117fecedb52dad4a24caf127547562321090d1beb530fe984e8dbb13dc3957b6 - 0.0% (764 Bytes)
[#019] sha256:a528216b8fda718d2e321641147b6cb157c2fa8f75fe1ce3539837e24067575b - 0.0% (713 Bytes)
[#020] sha256:ab99255fe74f02fc9d5f4aa8860c45dde7e4d0adf8062513d06344e1cb98b5e2 - 0.02% (268 KB)
[#021] sha256:71f3703211025d2cf78fd5f90fe2a5e8beedebff82cb98d2aa5d039584f4643e - 0.0% (91 Bytes)
[#022] sha256:c8c3a72bdff65b6ffa546190945fb98e55191b82d7774501d167d8b0bc1d51dc - 17.89% (196 MB)
[#023] sha256:4fe5b1d8754c365332beea0388f7b88e6248980455c9087c160872e9b26dd2d0 - 0.0% (96 Bytes)
[#024] sha256:4fe5b1d8754c365332beea0388f7b88e6248980455c9087c160872e9b26dd2d0 - 0.0% (96 Bytes)
[#025] sha256:f02785496474d4eaa26b408cc5ce6a10e0b093a340eb7ae5a568b9aff06068dd - 12.02% (132 MB)
[#026] sha256:c56b440b5fab413b9e9ebd9e705b9751ed4034f98b95ee7bb4595d9b91aefec5 - 0.0% (3.28 KB)
[#027] sha256:c60c80fcb02572457d0f39e4e602ce1d3931a558db37cf6bda65da51e5767871 - 0.01% (143 KB)
[#028] sha256:75410ce8bb1bfce878535e4a26f73997db50cc705417ebd9a3647d2b4015eb11 - 2.22% (24.3 MB)
[#029] sha256:73bc2a2368249d6bb16c6c06a296ee4dc1d7b10bc7c5b969fb823379f5c3fed4 - 1.78% (19.5 MB)
[#030] sha256:5a6f7c3c459ceb13ff116eb3d15cabe77be4073d7d80a8a7e776882fd7f525e2 - 0.0% (2.39 KB)
[#031] sha256:0bb288513a7605a25da09389445dc04f98aa25b7252f11394f93dd9722d88519 - 0.01% (156 KB)
[#032] sha256:1ec15fa41b24477c08a9451929f53a41743b215b58e15bab30a0271f80c566b4 - 2.32% (25.5 MB)
[#033] sha256:cd2dbf5526588975d47494153261b5d8414274fb229d659f0052c743f49d76cd - 2.78% (30.5 MB)
[#034] sha256:b3695ccb1c05f5992ff8a0733e5f492d173179f2f9088b3ec8e7fec2e9a71a8d - 0.01% (125 KB)
[#035] sha256:fd46b9d82d4087d2b3f9a358a7158c2bed41ba25e085b094de84fa6395d0d468 - 0.0% (147 Bytes)
/bin/sh -c #(nop) ARG RELEASE
2026-08-17 13:11:31 UTC/bin/sh -c #(nop) ARG LAUNCHPAD_BUILD_ARCH
2026-08-17 13:11:31 UTC/bin/sh -c #(nop) LABEL org.opencontainers.image.version=24.04
2026-08-17 13:11:34 UTC/bin/sh -c #(nop) ADD file:0387b3d029de8fa08641ccfaa44c6a4ad07b93035420d53b49783ea27527d153 in /
2026-08-17 13:11:34 UTC/bin/sh -c #(nop) CMD ["/bin/bash"]
2026-08-21 18:29:27 UTC (buildkit.dockerfile.v0)ENV JAVA_HOME=/opt/java/openjdk
2026-08-21 18:29:27 UTC (buildkit.dockerfile.v0)ENV PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
2026-08-21 18:29:27 UTC (buildkit.dockerfile.v0)ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
2026-08-21 18:29:27 UTC (buildkit.dockerfile.v0)RUN /bin/sh -c set -eux; apt-get update; DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends fontconfig ca-certificates p11-kit tzdata locales ; echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen; locale-gen en_US.UTF-8; rm -rf /var/lib/apt/lists/* # buildkit
2026-08-21 18:29:27 UTC (buildkit.dockerfile.v0)ENV JAVA_VERSION=jdk-25.0.4+7
2026-08-21 18:29:43 UTC (buildkit.dockerfile.v0)RUN /bin/sh -c set -eux; ARCH="$(dpkg --print-architecture)"; case "${ARCH}" in amd64) ESUM='aed3915f8facc0c80733ab2448bb0df4b494a36a2c5759e9a6e1eb979720f2b3'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.4%2B7/OpenJDK25U-jre_x64_linux_hotspot_25.0.4_7.tar.gz'; ;; arm64) ESUM='1f2644427000316bc431df3389504551ed7464fe8486bf6b4f1130af9ffc8f55'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.4%2B7/OpenJDK25U-jre_aarch64_linux_hotspot_25.0.4_7.tar.gz'; ;; ppc64el) ESUM='7c4235dc156e85d4e8b7b12075d7d72265fa49b73af2d0453d118a4786176476'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.4%2B7/OpenJDK25U-jre_ppc64le_linux_hotspot_25.0.4_7.tar.gz'; ;; riscv64) ESUM='ee3e62f50e2bdd5b65f9f8937b33d862846d0245bc1be0dd8e3a99ea10fce32a'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.4%2B7/OpenJDK25U-jre_riscv64_linux_hotspot_25.0.4_7.tar.gz'; ;; s390x) ESUM='7698a64e995bf41cb2620bea225b6383e66a8b76a0b97ea04db89e300c470ed8'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.4%2B7/OpenJDK25U-jre_s390x_linux_hotspot_25.0.4_7.tar.gz'; ;; *) echo "Unsupported arch: ${ARCH}"; exit 1; ;; esac; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no-install-recommends wget gnupg; wget --progress=dot:giga -O /tmp/openjdk.tar.gz ${BINARY_URL}; wget --progress=dot:giga -O /tmp/openjdk.tar.gz.sig ${BINARY_URL}.sig; export GNUPGHOME="$(mktemp -d)"; gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 3B04D753C9050D9A5D343F39843C48A565F8F04B; gpg --batch --verify /tmp/openjdk.tar.gz.sig /tmp/openjdk.tar.gz; rm -rf "${GNUPGHOME}" /tmp/openjdk.tar.gz.sig; echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; mkdir -p "$JAVA_HOME"; tar --extract --file /tmp/openjdk.tar.gz --directory "$JAVA_HOME" --strip-components 1 --no-same-owner ; rm -f /tmp/openjdk.tar.gz; apt-mark auto '.*' > /dev/null; apt-mark manual $savedAptMark > /dev/null; apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; rm -rf /var/lib/apt/lists/*; find "$JAVA_HOME/lib" -name '*.so' -exec dirname '{}' ';' | sort -u > /etc/ld.so.conf.d/docker-openjdk.conf; ldconfig; java -Xshare:dump; # buildkit
2026-08-21 18:29:43 UTC (buildkit.dockerfile.v0)RUN /bin/sh -c set -eux; echo "Verifying install ..."; echo "java --version"; java --version; echo "Complete." # buildkit
2026-08-21 18:29:43 UTC (buildkit.dockerfile.v0)COPY --chmod=755 entrypoint.sh /__cacert_entrypoint.sh # buildkit
2026-08-21 18:29:43 UTC (buildkit.dockerfile.v0)ENTRYPOINT ["/__cacert_entrypoint.sh"]
2026-09-22 23:53:48 UTC (buildkit.dockerfile.v0)SHELL [/bin/bash -o pipefail -c]
2026-09-22 23:53:48 UTC (buildkit.dockerfile.v0)ENV DEBIAN_FRONTEND=noninteractive LANG=C.UTF-8 LC_ALL=C.UTF-8 TESS_BASE_PATH=/usr/share/tesseract-ocr/5/tessdata
2026-09-22 23:53:48 UTC (buildkit.dockerfile.v0)ARG UNOSERVER_VERSION=3.7
2026-09-22 23:53:48 UTC (buildkit.dockerfile.v0)RUN |1 UNOSERVER_VERSION=3.7 /bin/bash -o pipefail -c set -eux; apt-get update; apt-get install -y --no-install-recommends software-properties-common; add-apt-repository -y ppa:libreoffice/ppa; apt-get update; apt-get install -y --no-install-recommends ca-certificates tzdata tini bash fontconfig curl poppler-utils fontforge unpaper pngquant fonts-dejavu fonts-liberation2 fonts-crosextra-caladea fonts-crosextra-carlito fonts-noto-core fonts-noto-mono fonts-noto-extra fonts-noto-cjk poppler-data fonts-freefont-ttf fonts-terminus python3 python3-uno python3-packaging tesseract-ocr tesseract-ocr-eng tesseract-ocr-deu tesseract-ocr-fra tesseract-ocr-por tesseract-ocr-chi-sim tesseract-ocr-osd libcairo2 libpango-1.0-0 libpangoft2-1.0-0 libgdk-pixbuf-2.0-0 libfreetype6 libfontconfig1 libx11-6 libxt6 libxext6 libxrender1 libxtst6 libxi6 libxinerama1 libxkbcommon0 libsm6 libice6 libegl1 libgl1 libopengl0 libdbus-1-3 libglib2.0-0 libnss3 libasound2t64 libxcomposite1 libxrandr2 xvfb x11-utils coreutils libreoffice-writer-nogui libreoffice-calc-nogui libreoffice-impress-nogui libreoffice-draw-nogui libreoffice-base-nogui libreoffice-java-common ; libreoffice --version; soffice --version 2>/dev/null || true; /usr/lib/libreoffice/program/soffice.bin --headless --convert-to pdf /dev/null 2>/dev/null || true; fc-cache -f -v 2>&1 | awk 'NR <= 20'; apt-get remove --purge -y software-properties-common || true; apt-get autoremove --purge -y || true; rm -rf /var/lib/apt/lists/*; rm -rf /usr/share/doc/* /usr/share/man/* /usr/share/info/* /usr/share/lintian/* /usr/share/linda/* /usr/share/icons/* /usr/share/themes/* /usr/share/javascript/* /usr/share/gtk-3.0/* /usr/share/fontforge/pixmaps /usr/share/fontforge/osx /usr/share/fontforge/cidmap /usr/share/fontforge/prefs /usr/share/liblangtag/* /usr/share/tcltk/* /usr/share/python-wheels/* /usr/share/glib-2.0/schemas/* /usr/share/mime/* /usr/share/xml/iso-codes /usr/share/GConf /usr/share/bash-completion /usr/share/zsh /usr/share/libmysofa /usr/share/alsa /usr/share/iso-codes /usr/share/perl5 /usr/share/libthai /usr/share/libexttextcat /usr/share/openal /usr/share/gcc; find /usr/share/locale -mindepth 1 -maxdepth 1 -type d ! -name 'en*' -exec rm -rf {} + 2>/dev/null || true; rm -rf /usr/share/i18n/locales /usr/share/i18n/charmaps; rm -rf /usr/lib/libreoffice/share/gallery /usr/lib/libreoffice/share/template /usr/lib/libreoffice/share/wizards /usr/lib/libreoffice/share/autotext /usr/lib/libreoffice/help /usr/lib/libreoffice/share/config/images_*.zip /usr/lib/libreoffice/share/basic /usr/lib/libreoffice/share/Scripts /usr/lib/libreoffice/share/autocorr /usr/lib/libreoffice/share/classification /usr/lib/libreoffice/share/wordbook /usr/lib/libreoffice/share/fingerprint /usr/lib/libreoffice/share/xdg /usr/lib/libreoffice/share/numbertext /usr/lib/libreoffice/share/shell /usr/lib/libreoffice/share/palette /usr/lib/libreoffice/share/theme_definitions /usr/lib/libreoffice/share/xslt /usr/lib/libreoffice/share/labels /usr/lib/libreoffice/share/dtd /usr/lib/libreoffice/share/tipoftheday /usr/lib/libreoffice/share/toolbarmode /usr/lib/libreoffice/share/psprint /usr/lib/libreoffice/CREDITS.fodt /usr/lib/libreoffice/LICENSE.html; rm -rf /usr/lib/libreoffice/share/extensions/wiki-publisher /usr/lib/libreoffice/share/extensions/nlpsolver /usr/lib/libreoffice/share/extensions/dict-* 2>/dev/null || true; rm -rf /usr/lib/libreoffice/program/libdba* /usr/lib/libreoffice/program/libdbahsql* /usr/lib/libreoffice/program/libdbu* /usr/lib/libreoffice/program/libreport* 2>/dev/null || true; rm -rf /usr/lib/python3.12/test /usr/lib/python3.12/idlelib /usr/lib/python3.12/tkinter /usr/lib/python3.12/lib2to3 /usr/lib/python3.12/pydoc_data; rm -rf /usr/lib/python3/dist-packages/scipy /usr/lib/python3/dist-packages/sympy /usr/lib/python3/dist-packages/mpmath; rm -rf /usr/lib/python3/dist-packages/cffi /usr/lib/python3/dist-packages/cffi-*.dist-info /usr/lib/python3/dist-packages/_cffi_backend*.so /usr/lib/python3/dist-packages/_cffi_backend*.cpython*.so 2>/dev/null || true; find /usr/lib -name '*.so*' -type f -not -path '*/jvm/*' -not -path '*/libreoffice/*' -exec strip --strip-unneeded {} + 2>/dev/null || true; MULTIARCH_LIBDIR=$(dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null || find /usr/lib -maxdepth 1 -type d -name '*-linux-gnu' | head -1); rm -f "${MULTIARCH_LIBDIR}"/libLLVM*.so* "${MULTIARCH_LIBDIR}"/libgallium*.so* 2>/dev/null || true; find /usr/lib/python3* -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true; find /usr/lib/python3* \( -name '*.pyc' -o -name '*.pyi' \) -delete 2>/dev/null || true; rm -rf /usr/share/bug /usr/share/lintian /usr/share/linda /var/lib/dpkg/info/*.list /var/lib/dpkg/info/*.md5sums /var/lib/dpkg/info/*.conffiles /var/lib/dpkg/info/*.postinst /var/lib/dpkg/info/*.preinst /var/lib/dpkg/info/*.prerm /var/lib/dpkg/info/*.postrm /var/lib/dpkg/info/*.triggers /var/lib/dpkg/info/*.shlibs /var/lib/dpkg/info/*.symbols /var/lib/dpkg/info/*.templates /var/log/dpkg.log /var/log/apt/* /usr/local/share/ghostscript/*/doc /usr/local/share/ghostscript/*/examples /usr/share/ImageMagick-*/doc /usr/share/ImageMagick-*/www; rm -rf /usr/share/tesseract-ocr/*/tessdata/tessconfigs; find /usr/share/fonts/truetype/noto -type f ! -name '*Regular*' -delete 2>/dev/null || true; find /usr/share/fonts/opentype -type f ! -name '*Regular*' -delete 2>/dev/null || true; find /usr/share/fonts/truetype -name '*DejaVu*' ! -name '*-Regular*' ! -name '*-Bold*' ! -name '*Bold.ttf' ! -name 'DejaVuSans.ttf' ! -name 'DejaVuSerif.ttf' ! -name 'DejaVuSansMono.ttf' -type f -delete 2>/dev/null || true; find /usr/share/fonts -type d -empty -delete 2>/dev/null || true; GCONV_DIR=$(find /usr/lib -type d -name gconv 2>/dev/null | head -1); if [ -n "$GCONV_DIR" ] && [ -d "$GCONV_DIR" ]; then mkdir -p /tmp/gconv-keep; for mod in UTF-8.so UTF-16.so UTF-32.so UTF-7.so ISO8859-1.so ISO8859-15.so ISO8859-2.so ISO8859-9.so UNICODE.so CP1252.so CP1251.so CP1250.so EUC-JP.so EUC-KR.so EUC-CN.so SHIFT_JIS.so GB18030.so BIG5.so gconv-modules gconv-modules.d gconv-modules.cache; do [ -e "$GCONV_DIR/$mod" ] && cp -a "$GCONV_DIR/$mod" /tmp/gconv-keep/ 2>/dev/null || true; done; rm -rf "$GCONV_DIR"/*; cp -a /tmp/gconv-keep/* "$GCONV_DIR/" 2>/dev/null || true; rm -rf /tmp/gconv-keep; fi; rm -rf /var/cache/fontconfig/* /tmp/* # buildkit
2026-09-22 23:52:53 UTC (buildkit.dockerfile.v0)COPY /opt/calibre /opt/calibre # buildkit
2026-09-22 23:56:32 UTC (buildkit.dockerfile.v0)COPY /usr/local/bin/qpdf /usr/bin/qpdf # buildkit
2026-09-22 23:56:32 UTC (buildkit.dockerfile.v0)COPY /magick-export/ / # buildkit
2026-09-22 23:54:55 UTC (buildkit.dockerfile.v0)COPY /usr/local/bin/gs /usr/local/bin/gs # buildkit
2026-09-22 23:54:55 UTC (buildkit.dockerfile.v0)COPY /usr/local/share/ghostscript /usr/local/share/ghostscript # buildkit
2026-09-22 23:52:42 UTC (buildkit.dockerfile.v0)COPY /opt/venv /opt/venv # buildkit
2026-09-22 23:56:34 UTC (buildkit.dockerfile.v0)RUN |1 UNOSERVER_VERSION=3.7 /bin/bash -o pipefail -c ldconfig /usr/local/lib && PYTHONDONTWRITEBYTECODE=1 /opt/venv/bin/python -c "import cffi; print('cffi OK:', cffi.__version__)" && PYTHONDONTWRITEBYTECODE=1 /opt/venv/bin/python -c "import cv2; print('OpenCV', cv2.__version__)" && PYTHONDONTWRITEBYTECODE=1 /opt/venv/bin/python -c "import ocrmypdf; print('ocrmypdf OK')" && find /opt/venv -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true # buildkit
2026-09-22 23:56:34 UTC (buildkit.dockerfile.v0)ARG PUID=1000
2026-09-22 23:56:34 UTC (buildkit.dockerfile.v0)ARG PGID=1000
2026-09-22 23:56:34 UTC (buildkit.dockerfile.v0)RUN |3 UNOSERVER_VERSION=3.7 PUID=1000 PGID=1000 /bin/bash -o pipefail -c set -eux; if ! getent group stirlingpdfgroup >/dev/null 2>&1; then groupadd -g "${PGID}" stirlingpdfgroup 2>/dev/null || groupadd stirlingpdfgroup; fi; if ! id -u stirlingpdfuser >/dev/null 2>&1; then useradd -m -u "${PUID}" -g stirlingpdfgroup -d /home/stirlingpdfuser -s /bin/bash stirlingpdfuser 2>/dev/null || useradd -m -g stirlingpdfgroup -d /home/stirlingpdfuser -s /bin/bash stirlingpdfuser; fi # buildkit
2026-09-23 08:56:14 UTC (buildkit.dockerfile.v0)RUN |3 UNOSERVER_VERSION=3.7 PUID=1000 PGID=1000 /bin/bash -o pipefail -c set -eux; if ! getent group stirlingofficegroup >/dev/null 2>&1; then groupadd -g 1100 stirlingofficegroup 2>/dev/null || groupadd stirlingofficegroup; fi; if ! id -u stirlingofficeuser >/dev/null 2>&1; then useradd -m -u 1100 -g stirlingofficegroup -d /home/stirlingofficeuser -s /usr/sbin/nologin stirlingofficeuser 2>/dev/null || useradd -m -g stirlingofficegroup -d /home/stirlingofficeuser -s /usr/sbin/nologin stirlingofficeuser; fi; mkdir -p /var/lib/libreoffice-sandbox; chown stirlingofficeuser:stirlingofficegroup /home/stirlingofficeuser /var/lib/libreoffice-sandbox; chmod 700 /var/lib/libreoffice-sandbox # buildkit
2026-09-23 08:56:15 UTC (buildkit.dockerfile.v0)RUN |3 UNOSERVER_VERSION=3.7 PUID=1000 PGID=1000 /bin/bash -o pipefail -c set -eux; mkdir -p /configs /configs/cache /configs/heap_dumps /logs /customFiles /pipeline/watchedFolders /pipeline/finishedFolders /storage /tmp/stirling-pdf/heap_dumps; chown -R stirlingpdfuser:stirlingpdfgroup /home/stirlingpdfuser /configs /logs /customFiles /pipeline /storage /tmp/stirling-pdf; chmod 750 /tmp/stirling-pdf; chmod 750 /tmp/stirling-pdf/heap_dumps # buildkit
2026-09-23 08:56:17 UTC (buildkit.dockerfile.v0)RUN |3 UNOSERVER_VERSION=3.7 PUID=1000 PGID=1000 /bin/bash -o pipefail -c set -eux; ln -sf /opt/calibre/ebook-convert /usr/bin/ebook-convert; ln -sf /opt/venv/bin/unoconvert /usr/local/bin/unoconvert; ln -sf /opt/venv/bin/unoserver /usr/local/bin/unoserver; ln -sf /opt/venv/bin/ocrmypdf /usr/local/bin/ocrmypdf; ln -sf /opt/venv/bin/weasyprint /usr/local/bin/weasyprint; ln -sf /opt/venv/bin/unoping /usr/local/bin/unoping; fc-cache -f # buildkit
2026-09-23 11:28:36 UTC (buildkit.dockerfile.v0)COPY /usr/local/bin/lo-sandbox /usr/local/lib/stirling/lo-sandbox # buildkit
2026-09-23 11:28:36 UTC (buildkit.dockerfile.v0)COPY stirling-hardening.xcd /usr/lib/libreoffice/share/registry/stirling-hardening.xcd # buildkit
2026-09-23 11:28:36 UTC (buildkit.dockerfile.v0)COPY unoserver-pipe-transport.py /usr/local/lib/stirling/unoserver-pipe-transport.py # buildkit
2026-09-23 11:28:36 UTC (buildkit.dockerfile.v0)RUN |3 UNOSERVER_VERSION=3.7 PUID=1000 PGID=1000 /bin/bash -o pipefail -c set -eux; chown root:root /usr/local/lib/stirling/lo-sandbox /usr/lib/libreoffice/share/registry/stirling-hardening.xcd; chmod 0755 /usr/local/lib/stirling/lo-sandbox; chmod 0644 /usr/lib/libreoffice/share/registry/stirling-hardening.xcd; for name in /usr/bin/soffice /usr/bin/libreoffice /usr/bin/ooffice; do if [ -e "$name" ] || [ -L "$name" ]; then rm -f "$name"; fi; cp /usr/local/lib/stirling/lo-sandbox "$name"; chown root:root "$name"; chmod 0755 "$name"; done; /opt/venv/bin/python /usr/local/lib/stirling/unoserver-pipe-transport.py "$(/opt/venv/bin/python -c 'import unoserver, os; print(os.path.dirname(unoserver.__file__))')"; STIRLING_LO_SANDBOX=off /usr/bin/soffice --version # buildkit
2026-09-23 11:28:36 UTC (buildkit.dockerfile.v0)LABEL org.opencontainers.image.title=Stirling-PDF Base org.opencontainers.image.description=Pre-built base image with Calibre, Ghostscript, QPDF, ImageMagick, LibreOffice, OCRmyPDF and dependencies org.opencontainers.image.source=https://github.com/Stirling-Tools/Stirling-PDF org.opencontainers.image.licenses=MIT org.opencontainers.image.vendor=Stirling-Tools org.opencontainers.image.url=https://www.stirlingpdf.com org.opencontainers.image.documentation=https://docs.stirlingpdf.com maintainer=Stirling-Tools org.opencontainers.image.authors=Stirling-Tools
2026-09-24 07:46:40 UTC (buildkit.dockerfile.v0)ARG VERSION_TAG=3.0.0
2026-09-24 07:46:40 UTC (buildkit.dockerfile.v0)WORKDIR /app
2026-09-24 15:01:59 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /layers/dependencies/ /app/ # buildkit
2026-09-24 14:47:40 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /layers/spring-boot-loader/ /app/ # buildkit
2026-09-24 14:47:40 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /layers/snapshot-dependencies/ /app/ # buildkit
2026-09-24 15:01:58 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /layers/application/ /app/ # buildkit
2026-09-24 14:47:22 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /app/build/libs/restart-helper.jar /restart-helper.jar # buildkit
2026-09-24 14:47:22 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 scripts/ /scripts/ # buildkit
2026-09-24 14:40:40 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /opt/stirling-engine/python /opt/stirling-engine/python # buildkit
2026-09-24 14:40:40 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /opt/stirling-engine/.venv /opt/stirling-engine/.venv # buildkit
2026-09-24 14:39:59 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 engine/.env /opt/stirling-engine/.env # buildkit
2026-09-24 14:39:59 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 engine/src/ /opt/stirling-engine/src/ # buildkit
2026-09-24 14:47:22 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 /preinstalled-models/ /opt/stirling/preinstalled-models/ # buildkit
2026-09-24 15:02:01 UTC (buildkit.dockerfile.v0)COPY app/core/src/main/resources/static/fonts/*.ttf /usr/share/fonts/truetype/ # buildkit
2026-09-24 15:02:04 UTC (buildkit.dockerfile.v0)RUN |1 VERSION_TAG=3.0.0 /bin/bash -o pipefail -c set -eux; chmod +x /scripts/*; ln -s /logs /app/logs; ln -s /configs /app/configs; ln -s /customFiles /app/customFiles; ln -s /pipeline /app/pipeline; ln -s /storage /app/storage; chown -h stirlingpdfuser:stirlingpdfgroup /app/logs /app/configs /app/customFiles /app/pipeline /app/storage; chown stirlingpdfuser:stirlingpdfgroup /app; mkdir -p /opt/stirling-engine/data; chown -R stirlingpdfuser:stirlingpdfgroup /opt/stirling-engine/data; chmod 750 /tmp/stirling-pdf; chmod 750 /tmp/stirling-pdf/heap_dumps; fc-cache -f # buildkit
2026-09-24 15:02:04 UTC (buildkit.dockerfile.v0)RUN |1 VERSION_TAG=3.0.0 /bin/bash -o pipefail -c echo "${VERSION_TAG:-dev}" > /etc/stirling_version # buildkit
2026-09-24 15:02:04 UTC (buildkit.dockerfile.v0)ENV VERSION_TAG=3.0.0 FORMDETECTION_PREINSTALLEDMODELDIR=/opt/stirling/preinstalled-models STIRLING_AOT_ENABLE=false _JVM_OPTS=-XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/configs/heap_dumps -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational -XX:ShenandoahGCHeuristics=adaptive -XX:ShenandoahUncommitDelay=1000 -XX:ShenandoahGuaranteedYoungGCInterval=10000 -XX:ShenandoahGuaranteedOldGCInterval=30000 -XX:+UseCompactObjectHeaders -XX:+UseStringDeduplication -XX:+ExplicitGCInvokesConcurrent -XX:ReservedCodeCacheSize=96m -XX:CICompilerCount=2 -Dspring.threads.virtual.enabled=true -Djava.awt.headless=true JAVA_CUSTOM_OPTS= HOME=/home/stirlingpdfuser PUID=1000 PGID=1000 UMASK=022 FAT_DOCKER=true AIENGINE_ENABLED=true STIRLING_ENGINE_HOME=/opt/stirling-engine STIRLING_ENGINE_PORT=5001 STIRLING_ENGINE_WORKERS=2 INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false STIRLING_TEMPFILES_DIRECTORY=/tmp/stirling-pdf TMPDIR=/tmp/stirling-pdf TEMP=/tmp/stirling-pdf TMP=/tmp/stirling-pdf DBUS_SESSION_BUS_ADDRESS=/dev/null SAL_TMP=/tmp/stirling-pdf/libre
2026-09-24 15:02:04 UTC (buildkit.dockerfile.v0)LABEL org.opencontainers.image.title=Stirling-PDF Fat org.opencontainers.image.description=Fat version with extra fonts for air-gapped environments, includes Calibre, LibreOffice, Tesseract, OCRmyPDF org.opencontainers.image.source=https://github.com/Stirling-Tools/Stirling-PDF org.opencontainers.image.licenses=MIT org.opencontainers.image.vendor=Stirling-Tools org.opencontainers.image.url=https://www.stirlingpdf.com org.opencontainers.image.documentation=https://docs.stirlingpdf.com maintainer=Stirling-Tools org.opencontainers.image.authors=Stirling-Tools org.opencontainers.image.version=3.0.0 org.opencontainers.image.keywords=PDF, manipulation, fat, air-gapped, API, Spring Boot, React
2026-09-24 15:02:04 UTC (buildkit.dockerfile.v0)EXPOSE [8080/tcp]
2026-09-24 15:02:04 UTC (buildkit.dockerfile.v0)STOPSIGNAL SIGTERM
2026-09-24 15:02:04 UTC (buildkit.dockerfile.v0)HEALTHCHECK {Test:[CMD-SHELL curl -fs --max-time 10 http://localhost:8080${SYSTEM_ROOTURIPATH:-''}/api/v1/info/status || exit 1] Interval:30s Timeout:15s StartPeriod:2m0s StartInterval:0s Retries:5}
2026-09-24 15:02:04 UTC (buildkit.dockerfile.v0)ENTRYPOINT ["tini" "--" "/scripts/init.sh"]
2026-09-24 15:02:04 UTC (buildkit.dockerfile.v0)CMD []
Please be careful as this will not just delete the reference but also the actual content!
For example when you have latest and v1.2.3 both pointing to the same image
the deletion of latest will also permanently remove v1.2.3.