Namespace
paperlessngx
Image / Tag
paperless-ngx:3.0.5
Content Digest
sha256:65a4cabf0169ea7fbd90ab7bb28ba3f8b5909613635acda1a03ad606f34b456b
Details
Created

2026-08-01 21:46:18 UTC

Size

766 MB

Content Digest
Labels
  • org.opencontainers.image.authors
    paperless-ngx team <hello@paperless-ngx.com>
  • org.opencontainers.image.created
    2026-08-01T21:41:31.044Z
  • org.opencontainers.image.description
    A community-supported supercharged document management system: scan, index and archive all your documents
  • org.opencontainers.image.documentation
    https://docs.paperless-ngx.com/
  • org.opencontainers.image.licenses
    GPL-3.0
  • org.opencontainers.image.revision
    8fb73b2709e4c38180a7632edf32f32fe2315961
  • org.opencontainers.image.source
    https://github.com/paperless-ngx/paperless-ngx
  • org.opencontainers.image.title
    paperless-ngx
  • org.opencontainers.image.url
    https://github.com/paperless-ngx/paperless-ngx
  • org.opencontainers.image.version
    3.0.5

Environment
GPG_KEY

7169605F62C751356D054A26A821E680E5FA6305

LANG

C.UTF-8

PATH

/command:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PNGX_CONTAINERIZED

1

PYTHONDONTWRITEBYTECODE

1

PYTHONUNBUFFERED

1

PYTHONWARNINGS

ignore:::django.http.response:517

PYTHON_SHA256

c08bc65a81971c1dd5783182826503369466c7e67374d1646519adf05207b684

PYTHON_VERSION

3.12.13

S6_BEHAVIOUR_IF_STAGE2_FAILS

2

S6_CMD_WAIT_FOR_SERVICES_MAXTIME

0

S6_VERBOSITY

1

UV_LINK_MODE

copy

UV_TOOL_BIN_DIR

/usr/local/bin


Layers

[#000] sha256:e95a6c7ea7d49b37920899b023ecd0e32796c976c1748491f76cae53ba86d13a - 3.71% (28.4 MB)

[#001] sha256:aff2d9f8dc87f4c10bbb7f438f3a325169379776bdfad5c49e4be5acc3c2f192 - 0.16% (1.23 MB)

[#002] sha256:df79d931cd67092e2b8e48d8f6369922571efe4ee0f9af71636ce36600481492 - 1.51% (11.5 MB)

[#003] sha256:b32430367bf08f32c23778909985ac645d1794f0aeef670aa796a50c8751527d - 0.0% (248 Bytes)

[#004] sha256:dafb78acf6e7df31a5e9ea0c71b22dd39fcaf26c74a7458dc6913ef0260f2ba5 - 3.42% (26.2 MB)

[#005] sha256:ddc0d95b3c26ce189564c11fe3899a203c1472d2050007d9e33b774487f7a275 - 0.0% (132 Bytes)

[#006] sha256:67596829472ea318d3e4d44db0f32f68869d41bfcdaae9cb85b14e6dcdf4ab9e - 0.47% (3.64 MB)

[#007] sha256:f61f0aff553bd413130803288ff9946be81d2cb94f77bf664fdc68ef29fa6592 - 0.0% (12.1 KB)

[#008] sha256:cf6c8a6b26713db5cf4cd4259ffdc2b7240fdc88ec8770362afc817263dfb5f4 - 20.95% (160 MB)

[#009] sha256:569f630b9086619d522e91cfadafa205f9b72dc4de80d8244f1b87746a2b1cd3 - 0.0% (151 Bytes)

[#010] sha256:0e061cebec4276aeed8c8696e2b5c930c26449e133a2b07bf6fa77bd62b1c5dd - 0.04% (282 KB)

[#011] sha256:4a2f047b0fa3f538e52799198bc2108429ac222e2ae6337f026421c1afee7eea - 53.08% (407 MB)

[#012] sha256:d1112495ea44cfbda2278932397ba591d189b82ca7ea432a92725b3cce748842 - 0.14% (1.09 MB)

[#013] sha256:bae5af89deb5aea676374eb0782a751c2711b0f0a7b78b18fc28f8b94da58349 - 9.06% (69.4 MB)

[#014] sha256:6ed95aee9f73d8fdf2f8197d1037cb9b338d202a7ad107f3892bc24805166161 - 7.46% (57.1 MB)


History
2026-06-23 00:00:00 UTC (debuerreotype 0.17)

# debian.sh --arch 'amd64' out/ 'trixie' '@1782172800'

2026-06-24 02:01:30 UTC (buildkit.dockerfile.v0)

ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

2026-06-24 02:01:30 UTC (buildkit.dockerfile.v0)

ENV LANG=C.UTF-8

2026-06-24 02:01:30 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates netbase tzdata ; apt-get dist-clean # buildkit

2026-06-24 02:01:30 UTC (buildkit.dockerfile.v0)

ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305

2026-06-24 02:01:30 UTC (buildkit.dockerfile.v0)

ENV PYTHON_VERSION=3.12.13

2026-06-24 02:01:30 UTC (buildkit.dockerfile.v0)

ENV PYTHON_SHA256=c08bc65a81971c1dd5783182826503369466c7e67374d1646519adf05207b684

2026-06-24 02:10:24 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no-install-recommends dpkg-dev gcc gnupg libbluetooth-dev libbz2-dev libc6-dev libdb-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libreadline-dev libsqlite3-dev libssl-dev make tk-dev uuid-dev wget xz-utils zlib1g-dev ; wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz"; echo "$PYTHON_SHA256 *python.tar.xz" | sha256sum -c -; wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc"; GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$GPG_KEY"; gpg --batch --verify python.tar.xz.asc python.tar.xz; gpgconf --kill all; rm -rf "$GNUPGHOME" python.tar.xz.asc; mkdir -p /usr/src/python; tar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; rm python.tar.xz; cd /usr/src/python; gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; ./configure --build="$gnuArch" --enable-loadable-sqlite-extensions --enable-optimizations --enable-option-checking=fatal --enable-shared $(test "${gnuArch%%-*}" != 'riscv64' && echo '--with-lto') --with-ensurepip ; nproc="$(nproc)"; EXTRA_CFLAGS="$(dpkg-buildflags --get CFLAGS)"; LDFLAGS="$(dpkg-buildflags --get LDFLAGS)"; LDFLAGS="${LDFLAGS:-} -Wl,--strip-all"; arch="$(dpkg --print-architecture)"; arch="${arch##*-}"; case "$arch" in amd64|arm64) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"; ;; i386) ;; *) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer"; ;; esac; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-}" ; rm python; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\$\$ORIGIN/../lib'" python ; make install; cd /; rm -rf /usr/src/python; find /usr/local -depth \( \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) -o \( -type f -a \( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \) \) \) -exec rm -rf '{}' + ; ldconfig; apt-mark auto '.*' > /dev/null; apt-mark manual $savedAptMark; find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); printf "*%s\n", so }' | sort -u | xargs -rt dpkg-query --search | awk 'sub(":$", "", $1) { print $1 }' | sort -u | xargs -r apt-mark manual ; apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; apt-get dist-clean; export PYTHONDONTWRITEBYTECODE=1; python3 --version; pip3 --version # buildkit

2026-06-24 02:10:24 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; for src in idle3 pip3 pydoc3 python3 python3-config; do dst="$(echo "$src" | tr -d 3)"; [ -s "/usr/local/bin/$src" ]; [ ! -e "/usr/local/bin/$dst" ]; ln -svT "$src" "/usr/local/bin/$dst"; done # buildkit

2026-06-24 02:10:24 UTC (buildkit.dockerfile.v0)

CMD ["python3"]

2026-07-07 23:07:53 UTC (buildkit.dockerfile.v0)

COPY /uv /uvx /usr/local/bin/ # buildkit

2026-07-07 23:07:53 UTC (buildkit.dockerfile.v0)

ENV UV_TOOL_BIN_DIR=/usr/local/bin

2026-07-07 23:07:53 UTC (buildkit.dockerfile.v0)

ENTRYPOINT []

2026-07-07 23:07:53 UTC (buildkit.dockerfile.v0)

CMD ["/usr/local/bin/uv"]

2026-07-15 15:38:36 UTC (buildkit.dockerfile.v0)

WORKDIR /usr/src/s6

2026-07-15 15:38:46 UTC (buildkit.dockerfile.v0)

ENV S6_BEHAVIOUR_IF_STAGE2_FAILS=2 S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 S6_VERBOSITY=1 PATH=/command:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

2026-07-15 15:38:46 UTC (buildkit.dockerfile.v0)

ARG TARGETARCH=amd64

2026-07-15 15:38:46 UTC (buildkit.dockerfile.v0)

ARG TARGETVARIANT=

2026-07-15 15:38:46 UTC (buildkit.dockerfile.v0)

ARG S6_OVERLAY_VERSION=3.2.2.0

2026-07-15 15:38:46 UTC (buildkit.dockerfile.v0)

ARG S6_BUILD_TIME_PKGS=curl xz-utils

2026-07-15 15:38:46 UTC (buildkit.dockerfile.v0)

RUN |4 TARGETARCH=amd64 TARGETVARIANT= S6_OVERLAY_VERSION=3.2.2.0 S6_BUILD_TIME_PKGS=curl xz-utils /bin/sh -c set -eux && echo "Installing build time packages" && apt-get update && apt-get install --yes --quiet --no-install-recommends ${S6_BUILD_TIME_PKGS} && echo "Determining arch" && S6_ARCH="" && if [ "${TARGETARCH}${TARGETVARIANT}" = "amd64" ]; then S6_ARCH="x86_64"; elif [ "${TARGETARCH}${TARGETVARIANT}" = "arm64" ]; then S6_ARCH="aarch64"; fi && if [ -z "${S6_ARCH}" ]; then { echo "Error: Not able to determine arch"; exit 1; }; fi && echo "Installing s6-overlay for ${S6_ARCH}" && curl --fail --silent --no-progress-meter --show-error --location --remote-name-all --parallel --parallel-max 4 "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz" "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz.sha256" "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_ARCH}.tar.xz" "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_ARCH}.tar.xz.sha256" && echo "Validating s6-archive checksums" && sha256sum --check ./*.sha256 && echo "Unpacking archives" && tar --directory / -Jxpf s6-overlay-noarch.tar.xz && tar --directory / -Jxpf s6-overlay-${S6_ARCH}.tar.xz && echo "Removing downloaded archives" && rm ./*.tar.xz && rm ./*.sha256 && echo "Cleaning up image" && apt-get --yes purge ${S6_BUILD_TIME_PKGS} && apt-get --yes autoremove --purge && rm -rf /var/lib/apt/lists/* # buildkit

2026-08-01 02:11:59 UTC (buildkit.dockerfile.v0)

COPY ./docker/rootfs / # buildkit

2026-08-01 02:11:59 UTC (buildkit.dockerfile.v0)

LABEL org.opencontainers.image.authors=paperless-ngx team <hello@paperless-ngx.com>

2026-08-01 02:11:59 UTC (buildkit.dockerfile.v0)

LABEL org.opencontainers.image.documentation=https://docs.paperless-ngx.com/

2026-08-01 02:11:59 UTC (buildkit.dockerfile.v0)

LABEL org.opencontainers.image.source=https://github.com/paperless-ngx/paperless-ngx

2026-08-01 02:11:59 UTC (buildkit.dockerfile.v0)

LABEL org.opencontainers.image.url=https://github.com/paperless-ngx/paperless-ngx

2026-08-01 02:11:59 UTC (buildkit.dockerfile.v0)

LABEL org.opencontainers.image.licenses=GPL-3.0-only

2026-08-01 02:11:59 UTC (buildkit.dockerfile.v0)

ARG DEBIAN_FRONTEND=noninteractive

2026-08-01 02:11:59 UTC (buildkit.dockerfile.v0)

ARG TARGETARCH=amd64

2026-08-01 02:11:59 UTC (buildkit.dockerfile.v0)

ARG JBIG2ENC_VERSION=0.30

2026-08-01 02:11:59 UTC (buildkit.dockerfile.v0)

ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 PYTHONWARNINGS=ignore:::django.http.response:517 PNGX_CONTAINERIZED=1 UV_LINK_MODE=copy

2026-08-01 02:11:59 UTC (buildkit.dockerfile.v0)

ARG RUNTIME_PACKAGES= curl gosu tzdata fonts-liberation gettext ghostscript gnupg icc-profiles-free imagemagick postgresql-client mariadb-client tesseract-ocr tesseract-ocr-eng tesseract-ocr-deu tesseract-ocr-fra tesseract-ocr-ita tesseract-ocr-spa unpaper pngquant jbig2dec libxml2 libxslt1.1 qpdf file libmagic1 media-types zlib1g poppler-utils

2026-08-01 02:12:28 UTC (buildkit.dockerfile.v0)

RUN |7 TARGETARCH=amd64 TARGETVARIANT= S6_OVERLAY_VERSION=3.2.2.0 S6_BUILD_TIME_PKGS=curl xz-utils DEBIAN_FRONTEND=noninteractive JBIG2ENC_VERSION=0.30 RUNTIME_PACKAGES= curl gosu tzdata fonts-liberation gettext ghostscript gnupg icc-profiles-free imagemagick postgresql-client mariadb-client tesseract-ocr tesseract-ocr-eng tesseract-ocr-deu tesseract-ocr-fra tesseract-ocr-ita tesseract-ocr-spa unpaper pngquant jbig2dec libxml2 libxslt1.1 qpdf file libmagic1 media-types zlib1g poppler-utils /bin/sh -c set -eux echo "Installing system packages" && apt-get update && apt-get install --yes --quiet --no-install-recommends ${RUNTIME_PACKAGES} && echo "Installing pre-built updates" && curl --fail --silent --no-progress-meter --show-error --location --remote-name-all https://github.com/paperless-ngx/builder/releases/download/jbig2enc-trixie-v${JBIG2ENC_VERSION}/jbig2enc_${JBIG2ENC_VERSION}-1_${TARGETARCH}.deb && echo "Installing jbig2enc" && dpkg --install ./jbig2enc_${JBIG2ENC_VERSION}-1_${TARGETARCH}.deb && echo "Configuring imagemagick" && cp /etc/ImageMagick-6/paperless-policy.xml /etc/ImageMagick-6/policy.xml && echo "Cleaning up image layer" && rm --force --verbose *.deb && rm --recursive --force --verbose /var/lib/apt/lists/* # buildkit

2026-08-01 02:12:28 UTC (buildkit.dockerfile.v0)

WORKDIR /usr/src/paperless/src/

2026-08-01 21:41:41 UTC (buildkit.dockerfile.v0)

COPY --chown=1000:1000 pyproject.toml uv.lock /usr/src/paperless/src/ # buildkit

2026-08-01 21:41:41 UTC (buildkit.dockerfile.v0)

ARG BUILD_PACKAGES= build-essential default-libmysqlclient-dev pkg-config

2026-08-01 21:42:35 UTC (buildkit.dockerfile.v0)

RUN |8 TARGETARCH=amd64 TARGETVARIANT= S6_OVERLAY_VERSION=3.2.2.0 S6_BUILD_TIME_PKGS=curl xz-utils DEBIAN_FRONTEND=noninteractive JBIG2ENC_VERSION=0.30 RUNTIME_PACKAGES= curl gosu tzdata fonts-liberation gettext ghostscript gnupg icc-profiles-free imagemagick postgresql-client mariadb-client tesseract-ocr tesseract-ocr-eng tesseract-ocr-deu tesseract-ocr-fra tesseract-ocr-ita tesseract-ocr-spa unpaper pngquant jbig2dec libxml2 libxslt1.1 qpdf file libmagic1 media-types zlib1g poppler-utils BUILD_PACKAGES= build-essential default-libmysqlclient-dev pkg-config /bin/sh -c set -eux && echo "Installing build system packages" && apt-get update && apt-get install --yes --quiet --no-install-recommends ${BUILD_PACKAGES} && echo "Installing Python requirements" && uv export --quiet --no-dev --all-extras --format requirements-txt --output-file requirements.txt && uv pip install --no-cache --system --no-python-downloads --python-preference system --index https://pypi.org/simple --index https://download.pytorch.org/whl/cpu --index-strategy unsafe-best-match --requirements requirements.txt && echo "Installing NLTK data" && python3 -W ignore::RuntimeWarning -m nltk.downloader -d "/usr/share/nltk_data" snowball_data && python3 -W ignore::RuntimeWarning -m nltk.downloader -d "/usr/share/nltk_data" stopwords && python3 -W ignore::RuntimeWarning -m nltk.downloader -d "/usr/share/nltk_data" punkt_tab && echo "Cleaning up image" && apt-get --yes purge ${BUILD_PACKAGES} && apt-get --yes autoremove --purge && apt-get clean --yes && rm --recursive --force --verbose *.whl && rm --recursive --force --verbose /var/lib/apt/lists/* && rm --recursive --force --verbose /tmp/* && rm --recursive --force --verbose /var/tmp/* && rm --recursive --force --verbose /var/cache/apt/archives/* && truncate --size 0 /var/log/*log # buildkit

2026-08-01 21:42:36 UTC (buildkit.dockerfile.v0)

COPY --chown=1000:1000 ./src ./ # buildkit

2026-08-01 21:43:10 UTC (buildkit.dockerfile.v0)

COPY --chown=1000:1000 /src/src/documents/static/frontend/ ./documents/static/frontend/ # buildkit

2026-08-01 21:46:18 UTC (buildkit.dockerfile.v0)

RUN |8 TARGETARCH=amd64 TARGETVARIANT= S6_OVERLAY_VERSION=3.2.2.0 S6_BUILD_TIME_PKGS=curl xz-utils DEBIAN_FRONTEND=noninteractive JBIG2ENC_VERSION=0.30 RUNTIME_PACKAGES= curl gosu tzdata fonts-liberation gettext ghostscript gnupg icc-profiles-free imagemagick postgresql-client mariadb-client tesseract-ocr tesseract-ocr-eng tesseract-ocr-deu tesseract-ocr-fra tesseract-ocr-ita tesseract-ocr-spa unpaper pngquant jbig2dec libxml2 libxslt1.1 qpdf file libmagic1 media-types zlib1g poppler-utils BUILD_PACKAGES= build-essential default-libmysqlclient-dev pkg-config /bin/sh -c set -eux && sed -i '1s|^#!/usr/bin/env python3|#!/command/with-contenv python3|' manage.py && echo "Setting up user/group" && addgroup --gid 1000 paperless && useradd --uid 1000 --gid paperless --home-dir /usr/src/paperless paperless && echo "Creating volume directories" && mkdir --parents --verbose /usr/src/paperless/data && mkdir --parents --verbose /usr/src/paperless/media && mkdir --parents --verbose /usr/src/paperless/consume && mkdir --parents --verbose /usr/src/paperless/export && echo "Creating gnupg directory" && mkdir -m700 --verbose /usr/src/paperless/.gnupg && echo "Adjusting all permissions" && chown --from root:root --changes --recursive paperless:paperless /usr/src/paperless && echo "Making fontconfig cache writable for arbitrary container UIDs" && chmod 1777 /var/cache/fontconfig && echo "Making /run world-writable for rootless operation" && chmod 1777 /run && echo "Removing setuid from s6-overlay-suexec for rootless compat" && chmod u-s /command/s6-overlay-suexec && echo "Collecting static files" && PAPERLESS_SECRET_KEY=build-time-dummy s6-setuidgid paperless python3 manage.py collectstatic --clear --no-input --link && PAPERLESS_SECRET_KEY=build-time-dummy s6-setuidgid paperless python3 manage.py compilemessages && /usr/local/bin/deduplicate.py --verbose /usr/src/paperless/static/ # buildkit

2026-08-01 21:46:18 UTC (buildkit.dockerfile.v0)

VOLUME [/usr/src/paperless/data /usr/src/paperless/media /usr/src/paperless/consume /usr/src/paperless/export]

2026-08-01 21:46:18 UTC (buildkit.dockerfile.v0)

ENTRYPOINT ["/init"]

2026-08-01 21:46:18 UTC (buildkit.dockerfile.v0)

EXPOSE [8000/tcp]

2026-08-01 21:46:18 UTC (buildkit.dockerfile.v0)

HEALTHCHECK {Test:[CMD curl -fs -S -L --max-time 2 http://localhost:8000] Interval:30s Timeout:10s StartPeriod:0s StartInterval:0s Retries:5}

Details
Created

2026-08-01 21:43:03 UTC

Size

722 MB

Content Digest
Labels
  • org.opencontainers.image.authors
    paperless-ngx team <hello@paperless-ngx.com>
  • org.opencontainers.image.created
    2026-08-01T21:39:57.370Z
  • org.opencontainers.image.description
    A community-supported supercharged document management system: scan, index and archive all your documents
  • org.opencontainers.image.documentation
    https://docs.paperless-ngx.com/
  • org.opencontainers.image.licenses
    GPL-3.0
  • org.opencontainers.image.revision
    8fb73b2709e4c38180a7632edf32f32fe2315961
  • org.opencontainers.image.source
    https://github.com/paperless-ngx/paperless-ngx
  • org.opencontainers.image.title
    paperless-ngx
  • org.opencontainers.image.url
    https://github.com/paperless-ngx/paperless-ngx
  • org.opencontainers.image.version
    3.0.5

Environment
GPG_KEY

7169605F62C751356D054A26A821E680E5FA6305

LANG

C.UTF-8

PATH

/command:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PNGX_CONTAINERIZED

1

PYTHONDONTWRITEBYTECODE

1

PYTHONUNBUFFERED

1

PYTHONWARNINGS

ignore:::django.http.response:517

PYTHON_SHA256

c08bc65a81971c1dd5783182826503369466c7e67374d1646519adf05207b684

PYTHON_VERSION

3.12.13

S6_BEHAVIOUR_IF_STAGE2_FAILS

2

S6_CMD_WAIT_FOR_SERVICES_MAXTIME

0

S6_VERBOSITY

1

UV_LINK_MODE

copy

UV_TOOL_BIN_DIR

/usr/local/bin


Layers

[#000] sha256:3be819c1c8cfde074541a1d875fbf2da3642b0ec6bb39aaa2ce7d56052b67dc1 - 3.98% (28.8 MB)

[#001] sha256:7af48765385d1829dcd55a84e2bb1711e7ae9ed8c2a78cb1894ecccee67155fd - 0.17% (1.22 MB)

[#002] sha256:cffa4384564c01362ec4028304df9debd74692071dbe4dc24e4e0597b5fce5e8 - 1.59% (11.5 MB)

[#003] sha256:0f1b58ea93c802a468c35d692ba5c076833dfcdbe8a3c659bd88988cddb03058 - 0.0% (250 Bytes)

[#004] sha256:d5301c17a65bc4185cb9de2ccacc6f3046c7ba04623f29c52fe81154d09af88e - 3.4% (24.6 MB)

[#005] sha256:d549239d17bf1cf9c4e4c1b48982bfb937c3f217f604ef4461f4feeac132fa83 - 0.0% (132 Bytes)

[#006] sha256:df33eefa41e00612c4a65b56362a2396866694f8787303cffae677875b206f5a - 0.57% (4.12 MB)

[#007] sha256:f61f0aff553bd413130803288ff9946be81d2cb94f77bf664fdc68ef29fa6592 - 0.0% (12.1 KB)

[#008] sha256:65b96cf483297f5393d2ddc7db565a25fedd4bf9b796bb9066122d4df7069d11 - 21.97% (159 MB)

[#009] sha256:bf63be8013ecaebf3c6a5fdd5e9d4866b0b707ffdd5b6dd601dd304e159c6ef0 - 0.0% (151 Bytes)

[#010] sha256:62ae916083793e98df819f7f525b6a8fe98d70e5df501555f0027f39641745c6 - 0.04% (282 KB)

[#011] sha256:d553ec40d245cd8a0bb44f214ed1257601f5d476b3575a187644e3c9b4c2c339 - 50.58% (365 MB)

[#012] sha256:ff2fa13052c6f957823e4b236d8115b6a062f44999f5c352ce40f9074a050f77 - 0.15% (1.09 MB)

[#013] sha256:b1cee372aee76619a791d6d5756265b440efe41e32434eda4e60df7f7000b721 - 9.62% (69.4 MB)

[#014] sha256:3ec9722860271a4099491c5e8552078fa3a8d191966e9d22670fa1d5822e6eea - 7.91% (57.1 MB)


History
2026-06-23 00:00:00 UTC (debuerreotype 0.17)

# debian.sh --arch 'arm64' out/ 'trixie' '@1782172800'

2026-06-24 02:05:30 UTC (buildkit.dockerfile.v0)

ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

2026-06-24 02:05:30 UTC (buildkit.dockerfile.v0)

ENV LANG=C.UTF-8

2026-06-24 02:05:30 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates netbase tzdata ; apt-get dist-clean # buildkit

2026-06-24 02:05:30 UTC (buildkit.dockerfile.v0)

ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305

2026-06-24 02:05:30 UTC (buildkit.dockerfile.v0)

ENV PYTHON_VERSION=3.12.13

2026-06-24 02:05:30 UTC (buildkit.dockerfile.v0)

ENV PYTHON_SHA256=c08bc65a81971c1dd5783182826503369466c7e67374d1646519adf05207b684

2026-06-24 02:17:10 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no-install-recommends dpkg-dev gcc gnupg libbluetooth-dev libbz2-dev libc6-dev libdb-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libreadline-dev libsqlite3-dev libssl-dev make tk-dev uuid-dev wget xz-utils zlib1g-dev ; wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz"; echo "$PYTHON_SHA256 *python.tar.xz" | sha256sum -c -; wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc"; GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$GPG_KEY"; gpg --batch --verify python.tar.xz.asc python.tar.xz; gpgconf --kill all; rm -rf "$GNUPGHOME" python.tar.xz.asc; mkdir -p /usr/src/python; tar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; rm python.tar.xz; cd /usr/src/python; gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; ./configure --build="$gnuArch" --enable-loadable-sqlite-extensions --enable-optimizations --enable-option-checking=fatal --enable-shared $(test "${gnuArch%%-*}" != 'riscv64' && echo '--with-lto') --with-ensurepip ; nproc="$(nproc)"; EXTRA_CFLAGS="$(dpkg-buildflags --get CFLAGS)"; LDFLAGS="$(dpkg-buildflags --get LDFLAGS)"; LDFLAGS="${LDFLAGS:-} -Wl,--strip-all"; arch="$(dpkg --print-architecture)"; arch="${arch##*-}"; case "$arch" in amd64|arm64) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"; ;; i386) ;; *) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer"; ;; esac; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-}" ; rm python; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\$\$ORIGIN/../lib'" python ; make install; cd /; rm -rf /usr/src/python; find /usr/local -depth \( \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) -o \( -type f -a \( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \) \) \) -exec rm -rf '{}' + ; ldconfig; apt-mark auto '.*' > /dev/null; apt-mark manual $savedAptMark; find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); printf "*%s\n", so }' | sort -u | xargs -rt dpkg-query --search | awk 'sub(":$", "", $1) { print $1 }' | sort -u | xargs -r apt-mark manual ; apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; apt-get dist-clean; export PYTHONDONTWRITEBYTECODE=1; python3 --version; pip3 --version # buildkit

2026-06-24 02:17:10 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; for src in idle3 pip3 pydoc3 python3 python3-config; do dst="$(echo "$src" | tr -d 3)"; [ -s "/usr/local/bin/$src" ]; [ ! -e "/usr/local/bin/$dst" ]; ln -svT "$src" "/usr/local/bin/$dst"; done # buildkit

2026-06-24 02:17:10 UTC (buildkit.dockerfile.v0)

CMD ["python3"]

2026-07-07 23:07:54 UTC (buildkit.dockerfile.v0)

COPY /uv /uvx /usr/local/bin/ # buildkit

2026-07-07 23:07:54 UTC (buildkit.dockerfile.v0)

ENV UV_TOOL_BIN_DIR=/usr/local/bin

2026-07-07 23:07:54 UTC (buildkit.dockerfile.v0)

ENTRYPOINT []

2026-07-07 23:07:54 UTC (buildkit.dockerfile.v0)

CMD ["/usr/local/bin/uv"]

2026-07-15 15:38:33 UTC (buildkit.dockerfile.v0)

WORKDIR /usr/src/s6

2026-07-15 15:38:56 UTC (buildkit.dockerfile.v0)

ENV S6_BEHAVIOUR_IF_STAGE2_FAILS=2 S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 S6_VERBOSITY=1 PATH=/command:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

2026-07-15 15:38:56 UTC (buildkit.dockerfile.v0)

ARG TARGETARCH=arm64

2026-07-15 15:38:56 UTC (buildkit.dockerfile.v0)

ARG TARGETVARIANT=

2026-07-15 15:38:56 UTC (buildkit.dockerfile.v0)

ARG S6_OVERLAY_VERSION=3.2.2.0

2026-07-15 15:38:56 UTC (buildkit.dockerfile.v0)

ARG S6_BUILD_TIME_PKGS=curl xz-utils

2026-07-15 15:38:56 UTC (buildkit.dockerfile.v0)

RUN |4 TARGETARCH=arm64 TARGETVARIANT= S6_OVERLAY_VERSION=3.2.2.0 S6_BUILD_TIME_PKGS=curl xz-utils /bin/sh -c set -eux && echo "Installing build time packages" && apt-get update && apt-get install --yes --quiet --no-install-recommends ${S6_BUILD_TIME_PKGS} && echo "Determining arch" && S6_ARCH="" && if [ "${TARGETARCH}${TARGETVARIANT}" = "amd64" ]; then S6_ARCH="x86_64"; elif [ "${TARGETARCH}${TARGETVARIANT}" = "arm64" ]; then S6_ARCH="aarch64"; fi && if [ -z "${S6_ARCH}" ]; then { echo "Error: Not able to determine arch"; exit 1; }; fi && echo "Installing s6-overlay for ${S6_ARCH}" && curl --fail --silent --no-progress-meter --show-error --location --remote-name-all --parallel --parallel-max 4 "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz" "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz.sha256" "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_ARCH}.tar.xz" "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_ARCH}.tar.xz.sha256" && echo "Validating s6-archive checksums" && sha256sum --check ./*.sha256 && echo "Unpacking archives" && tar --directory / -Jxpf s6-overlay-noarch.tar.xz && tar --directory / -Jxpf s6-overlay-${S6_ARCH}.tar.xz && echo "Removing downloaded archives" && rm ./*.tar.xz && rm ./*.sha256 && echo "Cleaning up image" && apt-get --yes purge ${S6_BUILD_TIME_PKGS} && apt-get --yes autoremove --purge && rm -rf /var/lib/apt/lists/* # buildkit

2026-08-01 02:11:49 UTC (buildkit.dockerfile.v0)

COPY ./docker/rootfs / # buildkit

2026-08-01 02:11:49 UTC (buildkit.dockerfile.v0)

LABEL org.opencontainers.image.authors=paperless-ngx team <hello@paperless-ngx.com>

2026-08-01 02:11:49 UTC (buildkit.dockerfile.v0)

LABEL org.opencontainers.image.documentation=https://docs.paperless-ngx.com/

2026-08-01 02:11:49 UTC (buildkit.dockerfile.v0)

LABEL org.opencontainers.image.source=https://github.com/paperless-ngx/paperless-ngx

2026-08-01 02:11:49 UTC (buildkit.dockerfile.v0)

LABEL org.opencontainers.image.url=https://github.com/paperless-ngx/paperless-ngx

2026-08-01 02:11:49 UTC (buildkit.dockerfile.v0)

LABEL org.opencontainers.image.licenses=GPL-3.0-only

2026-08-01 02:11:49 UTC (buildkit.dockerfile.v0)

ARG DEBIAN_FRONTEND=noninteractive

2026-08-01 02:11:49 UTC (buildkit.dockerfile.v0)

ARG TARGETARCH=arm64

2026-08-01 02:11:49 UTC (buildkit.dockerfile.v0)

ARG JBIG2ENC_VERSION=0.30

2026-08-01 02:11:49 UTC (buildkit.dockerfile.v0)

ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 PYTHONWARNINGS=ignore:::django.http.response:517 PNGX_CONTAINERIZED=1 UV_LINK_MODE=copy

2026-08-01 02:11:49 UTC (buildkit.dockerfile.v0)

ARG RUNTIME_PACKAGES= curl gosu tzdata fonts-liberation gettext ghostscript gnupg icc-profiles-free imagemagick postgresql-client mariadb-client tesseract-ocr tesseract-ocr-eng tesseract-ocr-deu tesseract-ocr-fra tesseract-ocr-ita tesseract-ocr-spa unpaper pngquant jbig2dec libxml2 libxslt1.1 qpdf file libmagic1 media-types zlib1g poppler-utils

2026-08-01 02:12:15 UTC (buildkit.dockerfile.v0)

RUN |7 TARGETARCH=arm64 TARGETVARIANT= S6_OVERLAY_VERSION=3.2.2.0 S6_BUILD_TIME_PKGS=curl xz-utils DEBIAN_FRONTEND=noninteractive JBIG2ENC_VERSION=0.30 RUNTIME_PACKAGES= curl gosu tzdata fonts-liberation gettext ghostscript gnupg icc-profiles-free imagemagick postgresql-client mariadb-client tesseract-ocr tesseract-ocr-eng tesseract-ocr-deu tesseract-ocr-fra tesseract-ocr-ita tesseract-ocr-spa unpaper pngquant jbig2dec libxml2 libxslt1.1 qpdf file libmagic1 media-types zlib1g poppler-utils /bin/sh -c set -eux echo "Installing system packages" && apt-get update && apt-get install --yes --quiet --no-install-recommends ${RUNTIME_PACKAGES} && echo "Installing pre-built updates" && curl --fail --silent --no-progress-meter --show-error --location --remote-name-all https://github.com/paperless-ngx/builder/releases/download/jbig2enc-trixie-v${JBIG2ENC_VERSION}/jbig2enc_${JBIG2ENC_VERSION}-1_${TARGETARCH}.deb && echo "Installing jbig2enc" && dpkg --install ./jbig2enc_${JBIG2ENC_VERSION}-1_${TARGETARCH}.deb && echo "Configuring imagemagick" && cp /etc/ImageMagick-6/paperless-policy.xml /etc/ImageMagick-6/policy.xml && echo "Cleaning up image layer" && rm --force --verbose *.deb && rm --recursive --force --verbose /var/lib/apt/lists/* # buildkit

2026-08-01 02:12:15 UTC (buildkit.dockerfile.v0)

WORKDIR /usr/src/paperless/src/

2026-08-01 21:40:11 UTC (buildkit.dockerfile.v0)

COPY --chown=1000:1000 pyproject.toml uv.lock /usr/src/paperless/src/ # buildkit

2026-08-01 21:40:11 UTC (buildkit.dockerfile.v0)

ARG BUILD_PACKAGES= build-essential default-libmysqlclient-dev pkg-config

2026-08-01 21:40:52 UTC (buildkit.dockerfile.v0)

RUN |8 TARGETARCH=arm64 TARGETVARIANT= S6_OVERLAY_VERSION=3.2.2.0 S6_BUILD_TIME_PKGS=curl xz-utils DEBIAN_FRONTEND=noninteractive JBIG2ENC_VERSION=0.30 RUNTIME_PACKAGES= curl gosu tzdata fonts-liberation gettext ghostscript gnupg icc-profiles-free imagemagick postgresql-client mariadb-client tesseract-ocr tesseract-ocr-eng tesseract-ocr-deu tesseract-ocr-fra tesseract-ocr-ita tesseract-ocr-spa unpaper pngquant jbig2dec libxml2 libxslt1.1 qpdf file libmagic1 media-types zlib1g poppler-utils BUILD_PACKAGES= build-essential default-libmysqlclient-dev pkg-config /bin/sh -c set -eux && echo "Installing build system packages" && apt-get update && apt-get install --yes --quiet --no-install-recommends ${BUILD_PACKAGES} && echo "Installing Python requirements" && uv export --quiet --no-dev --all-extras --format requirements-txt --output-file requirements.txt && uv pip install --no-cache --system --no-python-downloads --python-preference system --index https://pypi.org/simple --index https://download.pytorch.org/whl/cpu --index-strategy unsafe-best-match --requirements requirements.txt && echo "Installing NLTK data" && python3 -W ignore::RuntimeWarning -m nltk.downloader -d "/usr/share/nltk_data" snowball_data && python3 -W ignore::RuntimeWarning -m nltk.downloader -d "/usr/share/nltk_data" stopwords && python3 -W ignore::RuntimeWarning -m nltk.downloader -d "/usr/share/nltk_data" punkt_tab && echo "Cleaning up image" && apt-get --yes purge ${BUILD_PACKAGES} && apt-get --yes autoremove --purge && apt-get clean --yes && rm --recursive --force --verbose *.whl && rm --recursive --force --verbose /var/lib/apt/lists/* && rm --recursive --force --verbose /tmp/* && rm --recursive --force --verbose /var/tmp/* && rm --recursive --force --verbose /var/cache/apt/archives/* && truncate --size 0 /var/log/*log # buildkit

2026-08-01 21:40:52 UTC (buildkit.dockerfile.v0)

COPY --chown=1000:1000 ./src ./ # buildkit

2026-08-01 21:41:24 UTC (buildkit.dockerfile.v0)

COPY --chown=1000:1000 /src/src/documents/static/frontend/ ./documents/static/frontend/ # buildkit

2026-08-01 21:43:03 UTC (buildkit.dockerfile.v0)

RUN |8 TARGETARCH=arm64 TARGETVARIANT= S6_OVERLAY_VERSION=3.2.2.0 S6_BUILD_TIME_PKGS=curl xz-utils DEBIAN_FRONTEND=noninteractive JBIG2ENC_VERSION=0.30 RUNTIME_PACKAGES= curl gosu tzdata fonts-liberation gettext ghostscript gnupg icc-profiles-free imagemagick postgresql-client mariadb-client tesseract-ocr tesseract-ocr-eng tesseract-ocr-deu tesseract-ocr-fra tesseract-ocr-ita tesseract-ocr-spa unpaper pngquant jbig2dec libxml2 libxslt1.1 qpdf file libmagic1 media-types zlib1g poppler-utils BUILD_PACKAGES= build-essential default-libmysqlclient-dev pkg-config /bin/sh -c set -eux && sed -i '1s|^#!/usr/bin/env python3|#!/command/with-contenv python3|' manage.py && echo "Setting up user/group" && addgroup --gid 1000 paperless && useradd --uid 1000 --gid paperless --home-dir /usr/src/paperless paperless && echo "Creating volume directories" && mkdir --parents --verbose /usr/src/paperless/data && mkdir --parents --verbose /usr/src/paperless/media && mkdir --parents --verbose /usr/src/paperless/consume && mkdir --parents --verbose /usr/src/paperless/export && echo "Creating gnupg directory" && mkdir -m700 --verbose /usr/src/paperless/.gnupg && echo "Adjusting all permissions" && chown --from root:root --changes --recursive paperless:paperless /usr/src/paperless && echo "Making fontconfig cache writable for arbitrary container UIDs" && chmod 1777 /var/cache/fontconfig && echo "Making /run world-writable for rootless operation" && chmod 1777 /run && echo "Removing setuid from s6-overlay-suexec for rootless compat" && chmod u-s /command/s6-overlay-suexec && echo "Collecting static files" && PAPERLESS_SECRET_KEY=build-time-dummy s6-setuidgid paperless python3 manage.py collectstatic --clear --no-input --link && PAPERLESS_SECRET_KEY=build-time-dummy s6-setuidgid paperless python3 manage.py compilemessages && /usr/local/bin/deduplicate.py --verbose /usr/src/paperless/static/ # buildkit

2026-08-01 21:43:03 UTC (buildkit.dockerfile.v0)

VOLUME [/usr/src/paperless/data /usr/src/paperless/media /usr/src/paperless/consume /usr/src/paperless/export]

2026-08-01 21:43:03 UTC (buildkit.dockerfile.v0)

ENTRYPOINT ["/init"]

2026-08-01 21:43:03 UTC (buildkit.dockerfile.v0)

EXPOSE [8000/tcp]

2026-08-01 21:43:03 UTC (buildkit.dockerfile.v0)

HEALTHCHECK {Test:[CMD curl -fs -S -L --max-time 2 http://localhost:8000] Interval:30s Timeout:10s StartPeriod:0s StartInterval:0s Retries:5}

Danger Zone
Delete Tag

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.

Delete