镜像构建历史
# 2026-01-13 04:28:39 0.00B 设置默认要执行的命令
CMD []
# 2026-01-13 04:28:39 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["tini" "--" "/scripts/init.sh"]
# 2026-01-13 04:28:39 0.00B 设置停止容器时发送的系统调用信号
STOPSIGNAL SIGTERM
# 2026-01-13 04:28:39 0.00B 声明容器运行时监听的端口
EXPOSE [8080/tcp]
# 2026-01-13 04:28:39 0.00B 设置环境变量 QT_QPA_PLATFORM QTWEBENGINE_CHROMIUM_FLAGS
ENV QT_QPA_PLATFORM=offscreen QTWEBENGINE_CHROMIUM_FLAGS=--disable-gpu --disable-dev-shm-usage
# 2026-01-13 04:28:39 1.07MB 执行命令并创建新的镜像层
RUN |3 PUID=1000 PGID=1000 VERSION_TAG=2.2.1 /bin/bash -o pipefail -c fc-cache -f -v # buildkit
# 2026-01-13 04:28:36 138.26MB 执行命令并创建新的镜像层
RUN |3 PUID=1000 PGID=1000 VERSION_TAG=2.2.1 /bin/bash -o pipefail -c set -eux; chmod +x /scripts/*; mkdir -p /configs /configs/heap_dumps /logs /customFiles /pipeline/watchedFolders /pipeline/finishedFolders /tmp/stirling-pdf; chown -R stirlingpdfuser:stirlingpdfgroup /home/stirlingpdfuser /configs /logs /customFiles /pipeline /tmp/stirling-pdf /app.jar /restart-helper.jar /usr/share/fonts/truetype /scripts; chmod -R 755 /tmp/stirling-pdf # buildkit
# 2026-01-13 04:28:35 0.00B 设置环境变量 PATH
ENV PATH=/opt/venv/bin:/opt/unoserver-venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2026-01-13 04:28:35 67.00B 执行命令并创建新的镜像层
RUN |3 PUID=1000 PGID=1000 VERSION_TAG=2.2.1 /bin/bash -o pipefail -c ln -sf /opt/unoserver-venv/bin/unoconvert /opt/venv/bin/unoconvert && ln -sf /opt/unoserver-venv/bin/unoserver /opt/venv/bin/unoserver # buildkit
# 2026-01-13 04:28:35 10.47MB 执行命令并创建新的镜像层
RUN |3 PUID=1000 PGID=1000 VERSION_TAG=2.2.1 /bin/bash -o pipefail -c python3 -m venv /opt/unoserver-venv --system-site-packages && /opt/unoserver-venv/bin/pip install --no-cache-dir unoserver # buildkit
# 2026-01-13 04:28:33 276.83MB 执行命令并创建新的镜像层
RUN |3 PUID=1000 PGID=1000 VERSION_TAG=2.2.1 /bin/bash -o pipefail -c python3 -m venv /opt/venv --system-site-packages && /opt/venv/bin/pip install --no-cache-dir weasyprint pdf2image opencv-python-headless && /opt/venv/bin/python -c "import cv2; print('OpenCV version:', cv2.__version__)" # buildkit
# 2026-01-13 04:28:25 0.00B 设置环境变量 VERSION_TAG JAVA_BASE_OPTS -XX:HeapDumpPath -XX:MaxRAMPercentage -XX:InitiatingHeapOccupancyPercent -XX:G1PeriodicGCInterval -XX:G1PeriodicGCSystemLoadThreshold -Djava.awt.headless JAVA_CUSTOM_OPTS HOME PUID PGID UMASK FAT_DOCKER INSTALL_BOOK_AND_ADVANCED_HTML_OPS UNO_PATH STIRLING_TEMPFILES_DIRECTORY TMPDIR TEMP TMP
ENV VERSION_TAG=2.2.1 JAVA_BASE_OPTS=-XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/configs/heap_dumps -XX:+UnlockExperimentalVMOptions -XX:MaxRAMPercentage=75 -XX:InitiatingHeapOccupancyPercent=20 -XX:+G1PeriodicGCInvokesConcurrent -XX:G1PeriodicGCInterval=10000 -XX:+UseStringDeduplication -XX:G1PeriodicGCSystemLoadThreshold=70 -Djava.awt.headless=true JAVA_CUSTOM_OPTS= HOME=/home/stirlingpdfuser PUID=1000 PGID=1000 UMASK=022 FAT_DOCKER=true INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false UNO_PATH=/usr/lib/libreoffice/program STIRLING_TEMPFILES_DIRECTORY=/tmp/stirling-pdf TMPDIR=/tmp/stirling-pdf TEMP=/tmp/stirling-pdf TMP=/tmp/stirling-pdf
# 2026-01-13 04:28:25 0.00B 添加元数据标签
LABEL org.opencontainers.image.keywords=PDF, manipulation, fat, air-gapped, API, Spring Boot, React
# 2026-01-13 04:28:25 0.00B 添加元数据标签
LABEL org.opencontainers.image.version=2.2.1
# 2026-01-13 04:28:25 0.00B 添加元数据标签
LABEL org.opencontainers.image.authors=Stirling-Tools
# 2026-01-13 04:28:25 0.00B 添加元数据标签
LABEL maintainer=Stirling-Tools
# 2026-01-13 04:28:25 0.00B 添加元数据标签
LABEL org.opencontainers.image.documentation=https://docs.stirlingpdf.com
# 2026-01-13 04:28:25 0.00B 添加元数据标签
LABEL org.opencontainers.image.url=https://www.stirlingpdf.com
# 2026-01-13 04:28:25 0.00B 添加元数据标签
LABEL org.opencontainers.image.vendor=Stirling-Tools
# 2026-01-13 04:28:25 0.00B 添加元数据标签
LABEL org.opencontainers.image.licenses=MIT
# 2026-01-13 04:28:25 0.00B 添加元数据标签
LABEL org.opencontainers.image.source=https://github.com/Stirling-Tools/Stirling-PDF
# 2026-01-13 04:28:25 0.00B 添加元数据标签
LABEL org.opencontainers.image.description=Stirling-PDF with embedded frontend - Fat version with extra fonts for air-gapped environments, includes Calibre, LibreOffice, Tesseract, OCRmyPDF, and more
# 2026-01-13 04:28:25 0.00B 添加元数据标签
LABEL org.opencontainers.image.title=Stirling-PDF Fat
# 2026-01-13 04:28:25 0.00B 定义构建参数
ARG VERSION_TAG=2.2.1
# 2026-01-13 04:28:25 52.32MB 复制新文件或目录到容器中
COPY app/core/src/main/resources/static/fonts/*.ttf /usr/share/fonts/truetype/ # buildkit
# 2026-01-13 04:28:25 286.94KB 复制新文件或目录到容器中
COPY scripts/ /scripts/ # buildkit
# 2026-01-13 04:28:25 3.36KB 复制新文件或目录到容器中
COPY --chown=stirlingpdfuser:stirlingpdfgroup /app/build/libs/restart-helper.jar /restart-helper.jar # buildkit
# 2026-01-13 04:28:25 222.59MB 复制新文件或目录到容器中
COPY --chown=stirlingpdfuser:stirlingpdfgroup /app/app/core/build/libs/*.jar /app.jar # buildkit
# 2026-01-13 04:28:24 14.00B 执行命令并创建新的镜像层
RUN |2 PUID=1000 PGID=1000 /bin/bash -o pipefail -c ln -sf /usr/sbin/gosu /usr/local/bin/su-exec # buildkit
# 2026-01-13 04:28:24 9.62KB 执行命令并创建新的镜像层
RUN |2 PUID=1000 PGID=1000 /bin/bash -o pipefail -c set -eux; if ! getent group stirlingpdfgroup >/dev/null 2>&1; then if getent group "${PGID}" >/dev/null 2>&1; then groupadd -o -g "${PGID}" stirlingpdfgroup; else groupadd -g "${PGID}" stirlingpdfgroup; fi; fi; if ! id -u stirlingpdfuser >/dev/null 2>&1; then if getent passwd | awk -F: -v id="${PUID}" '$3==id{found=1} END{exit !found}'; then echo "UID ${PUID} already in use – creating stirlingpdfuser with automatic UID"; useradd -m -g stirlingpdfgroup -d /home/stirlingpdfuser -s /bin/bash stirlingpdfuser; else useradd -m -u "${PUID}" -g stirlingpdfgroup -d /home/stirlingpdfuser -s /bin/bash stirlingpdfuser; fi; fi # buildkit
# 2026-01-13 04:28:24 0.00B 定义构建参数
ARG PGID=1000
# 2026-01-13 04:28:24 0.00B 定义构建参数
ARG PUID=1000
# 2026-01-13 04:28:24 1.10KB 执行命令并创建新的镜像层
RUN /bin/bash -o pipefail -c ln -sf /opt/calibre/ebook-convert /usr/bin/ebook-convert && /opt/calibre/ebook-convert --version # buildkit
# 2026-01-13 04:28:24 2.32GB 执行命令并创建新的镜像层
RUN /bin/bash -o pipefail -c apt-get update && apt-get install -y --no-install-recommends ca-certificates tzdata tini bash fontconfig openjdk-21-jre-headless ffmpeg poppler-utils ocrmypdf imagemagick fontforge ghostscript libreoffice-nogui libreoffice-java-common python3 python3-venv python3-uno tesseract-ocr tesseract-ocr-eng tesseract-ocr-deu tesseract-ocr-fra tesseract-ocr-por tesseract-ocr-chi-sim libcairo2 libpango-1.0-0 libpangoft2-1.0-0 libgdk-pixbuf-2.0-0 gosu unpaper qpdf fonts-dejavu fonts-liberation fonts-noto fonts-noto-cjk fonts-noto-color-emoji fonts-freefont-ttf fonts-terminus fonts-linuxlibertine libfreetype6 libfontconfig1 libx11-6 libxt6 libxext6 libxrender1 libxtst6 libxi6 libxinerama1 libxkbcommon0 libxkbfile1 libsm6 libice6 libegl1 libopengl0 libgl1 libxdamage1 libxfixes3 libxshmfence1 libdrm2 libgbm1 libxkbcommon-x11-0 libxrandr2 libxcomposite1 libnss3 libx11-xcb1 libxcb-cursor0 libdbus-1-3 libglib2.0-0 xvfb x11-utils coreutils xz-utils gpgv curl xdg-utils && curl -fsSL https://download.calibre-ebook.com/linux-installer.sh | sh /dev/stdin && apt-get purge -y xz-utils gpgv xdg-utils && apt-get autoremove -y && rm -rf /var/lib/apt/lists/* # buildkit
# 2026-01-13 04:28:24 0.00B 设置环境变量 TESS_BASE_PATH
ENV TESS_BASE_PATH=/usr/share/tesseract-ocr/5/tessdata
# 2026-01-13 04:28:24 0.00B 设置环境变量 DEBIAN_FRONTEND
ENV DEBIAN_FRONTEND=noninteractive
# 2026-01-13 04:28:24 0.00B
SHELL [/bin/bash -o pipefail -c]
# 2025-12-08 08:00:00 78.62MB
# debian.sh --arch 'amd64' out/ 'stable' '@1765152000'
镜像信息
{
"Id": "sha256:88e536ae822fbd2ece499b384583ac84094b3498773b473be059c5ce51bc8acf",
"RepoTags": [
"stirlingtools/stirling-pdf:2.2.1-fat",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/stirlingtools/stirling-pdf:2.2.1-fat"
],
"RepoDigests": [
"stirlingtools/stirling-pdf@sha256:39ea5de6bb2e73516b39c0051cde46fac577e52220cd17feeaf0308d81e8d051",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/stirlingtools/stirling-pdf@sha256:767e1f755abf934c4b5782366fb0b0aa9b9f71eb20cf6f1f62958f6ae338349d"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-01-12T20:28:39.022052838Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8080/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/opt/venv/bin:/opt/unoserver-venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"DEBIAN_FRONTEND=noninteractive",
"TESS_BASE_PATH=/usr/share/tesseract-ocr/5/tessdata",
"VERSION_TAG=2.2.1",
"JAVA_BASE_OPTS=-XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/configs/heap_dumps -XX:+UnlockExperimentalVMOptions -XX:MaxRAMPercentage=75 -XX:InitiatingHeapOccupancyPercent=20 -XX:+G1PeriodicGCInvokesConcurrent -XX:G1PeriodicGCInterval=10000 -XX:+UseStringDeduplication -XX:G1PeriodicGCSystemLoadThreshold=70 -Djava.awt.headless=true",
"JAVA_CUSTOM_OPTS=",
"HOME=/home/stirlingpdfuser",
"PUID=1000",
"PGID=1000",
"UMASK=022",
"FAT_DOCKER=true",
"INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false",
"UNO_PATH=/usr/lib/libreoffice/program",
"STIRLING_TEMPFILES_DIRECTORY=/tmp/stirling-pdf",
"TMPDIR=/tmp/stirling-pdf",
"TEMP=/tmp/stirling-pdf",
"TMP=/tmp/stirling-pdf",
"QT_QPA_PLATFORM=offscreen",
"QTWEBENGINE_CHROMIUM_FLAGS=--disable-gpu --disable-dev-shm-usage"
],
"Cmd": null,
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": [
"tini",
"--",
"/scripts/init.sh"
],
"OnBuild": null,
"Labels": {
"maintainer": "Stirling-Tools",
"org.opencontainers.image.authors": "Stirling-Tools",
"org.opencontainers.image.created": "2026-01-12T20:27:06.851Z",
"org.opencontainers.image.description": "#1 PDF Application on GitHub that lets you edit PDFs on any device anywhere",
"org.opencontainers.image.documentation": "https://docs.stirlingpdf.com",
"org.opencontainers.image.keywords": "PDF, manipulation, fat, air-gapped, API, Spring Boot, React",
"org.opencontainers.image.licenses": "NOASSERTION",
"org.opencontainers.image.revision": "c7b713ac804a6503e3db269b06db48861d518761",
"org.opencontainers.image.source": "https://github.com/Stirling-Tools/Stirling-PDF",
"org.opencontainers.image.title": "Stirling-PDF",
"org.opencontainers.image.url": "https://github.com/Stirling-Tools/Stirling-PDF",
"org.opencontainers.image.vendor": "Stirling-Tools",
"org.opencontainers.image.version": "2.2.1-fat"
},
"StopSignal": "SIGTERM",
"Shell": [
"/bin/bash",
"-o",
"pipefail",
"-c"
]
},
"Architecture": "amd64",
"Os": "linux",
"Size": 3095531130,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/ffe05b35028ca98d768952ca7aa65c8e35c587c3aacc059bc3f0a1115b126172/diff:/var/lib/docker/overlay2/2e5d8edaf2cbc06ae58cbfb2b8894a1b9cbd624e747a0191b3b3ecc8e60df602/diff:/var/lib/docker/overlay2/da8ca40301c0b961be1f75aec8be81b2c836c3a354b86a5d94bfe116cab4876c/diff:/var/lib/docker/overlay2/99f155114be713d88eae29a391b5bb8330b45338efe0c71b9b225e76e0d490d3/diff:/var/lib/docker/overlay2/836e8d24d5cdcb79f927063ac48fbae033a9e11f5fbd44c692a9552e0634c2f9/diff:/var/lib/docker/overlay2/ceb9f9bf53eeb7b5b0be92d3fede6dc8f8edbf1fa99e017ef12814a19dc651bc/diff:/var/lib/docker/overlay2/a1930da31cc552ce8b1eecf36a82e5e92b0d872389a17e49653cb61c0b5c2848/diff:/var/lib/docker/overlay2/1a81ad2b64f8f13d7cc31c6fe83ef9355ca299efed80a9dc560c35ea7e51fa53/diff:/var/lib/docker/overlay2/7d544eca6ee2fe2b9bbab03aeb95d564da9944b4e1b1f61bcb0a3bd3f417464a/diff:/var/lib/docker/overlay2/67e474e138f8d65afbe5e8d8939a7c851b8c89a025e390049312550dbb16e5cc/diff:/var/lib/docker/overlay2/66f1b358d6c707be865e0a48d21e6b8ea2fa8ca9202503710d2e19cc7117c819/diff:/var/lib/docker/overlay2/7357f54bb23d5069a24b565f3e0688ba083c9eef5b58c8d9b9df21ddc66a6f65/diff:/var/lib/docker/overlay2/63e56fbb6dce01841a9276c1e8cc7373e72460e4a46e6b9b732c2119239af1fa/diff",
"MergedDir": "/var/lib/docker/overlay2/3df05fa287852864938cf1edb2be3f066a1365f6b70d8ba90701f531359d1c2c/merged",
"UpperDir": "/var/lib/docker/overlay2/3df05fa287852864938cf1edb2be3f066a1365f6b70d8ba90701f531359d1c2c/diff",
"WorkDir": "/var/lib/docker/overlay2/3df05fa287852864938cf1edb2be3f066a1365f6b70d8ba90701f531359d1c2c/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:487c21b30163442f9ee6b0419af017b72095d5ef7cc986cce5abc390f0c6783d",
"sha256:cafbea36b6e65e905e93a94a5af8dc7d77402c4b991e53b1c6ae24d02c889e5a",
"sha256:a2d570837f3e967c4e6d257c71d16bf43e32eb444c02e3a36c6a771f76c43f61",
"sha256:9152e03d343fc864e31a94873ba1b5ffe6aaae7b950acb6cb955ce61b46533f6",
"sha256:cbc6b0a62638974b6ea87690122d175ad9c4c89ebebabb55eb425f2869b94d0a",
"sha256:798f8d7320e1558496fe862e93ef465b519b9ba0fc19a3e63ccfe8985b269a00",
"sha256:e9e95e0ea746931a7f83110b4b0061f800a8cf9a057d37a3c3220b18b4cf2d6b",
"sha256:e5583e5f37036d6d0ed005d25dead44692070660cea319ff603439bec7909bfc",
"sha256:f137a1ec4dcf9639612dc1863848f3ede833b8a98e0eae24fe164c6f288f0560",
"sha256:bd52ed0fa749a37306c529cf9fbb974a2b4703bbb6c7c4389bea6cd522fbd862",
"sha256:113f9658437fb70e4508b51e64f838338a1bfce414a135683a962ebc881d6bec",
"sha256:b120b12a61f03236fe3184c44c7a7b7de456e2fca531717a20fb9add44cc0cc4",
"sha256:46065d4fe7106e41ddf1010eaef4b78096dab8fd433ba651f63bfba7f38ab194",
"sha256:28976a0d0f66a3c29319053fbb767c07a4ea2e9c1ed551f9f57994cb21ed6cd0"
]
},
"Metadata": {
"LastTagTime": "2026-01-14T16:51:54.282233817+08:00"
}
}