pkg

archivebox (1013)

Published 2026-10-13 02:36:21 +00:00 by packager

Installation

docker pull forge.myvelabs.com/pkg/archivebox:1013
sha256:bb3c49567be9bcec21b74dae31c9fb08d5e533e67cee0128673a9c4e4367669e

About this package

All-in-one self-hosted internet archiving solution

Image layers

# debian.sh --arch 'amd64' out/ 'trixie' '@1791158400'
ARG UV_VERSION
LABEL name=abx-dl maintainer=Nick Sweeting <dockerfile@archivebox.io> description=All-in-one CLI tool to download and extract content from URLs homepage=https://github.com/ArchiveBox/abx-dl documentation=https://github.com/ArchiveBox/abx-dl org.opencontainers.image.title=abx-dl org.opencontainers.image.vendor=ArchiveBox org.opencontainers.image.description=All-in-one CLI tool to download and extract content from URLs org.opencontainers.image.source=https://github.com/ArchiveBox/abx-dl
ARG TARGETPLATFORM
ARG TARGETOS
ARG TARGETARCH
ARG TARGETVARIANT
ENV TZ=UTC LANGUAGE=en_US:en LC_ALL=C.UTF-8 LANG=C.UTF-8 DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 PYTHONIOENCODING=UTF-8 PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1 PIP_DISABLE_PIP_VERSION_CHECK=1 PIP_NO_COMPILE=1 PIP_ONLY_BINARY=aiohttp npm_config_loglevel=error
ENV PYTHON_VERSION=3.13.12 NODE_VERSION=24.18.0
ENV ARCHIVEBOX_USER=archivebox DEFAULT_ARCHIVEBOX_UID=911 DEFAULT_ARCHIVEBOX_GID=911 IN_DOCKER=True
ENV CODE_DIR=/app DATA_DIR=/out CONFIG_DIR=/opt/archivebox ABXPKG_LIB_DIR=/opt/archivebox/lib PERSONAS_DIR=/data/personas CHROME_HEADLESS=true CHROME_SANDBOX=false CHROME_ISOLATION=crawl
ENV UV_COMPILE_BYTECODE=false UV_PYTHON_PREFERENCE=managed UV_PYTHON_INSTALL_DIR=/opt/uv/python UV_LINK_MODE=copy UV_PROJECT_ENVIRONMENT=/venv VIRTUAL_ENV=/venv PIP_VENV_PYTHON=/venv/bin/python3 PATH=/venv/bin:/opt/node/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV HOME=/home/archivebox XDG_CONFIG_HOME=/opt/archivebox XDG_CACHE_HOME=/opt/archivebox/lib/cache
SHELL [/bin/bash -o pipefail -o errexit -o errtrace -o nounset -c]
WORKDIR /app
RUN |5 UV_VERSION=0.10.6 TARGETPLATFORM=linux/amd64 TARGETOS=linux TARGETARCH=amd64 TARGETVARIANT= /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c echo 'Binary::apt::APT::Keep-Downloaded-Packages "0";' > /etc/apt/apt.conf.d/99keep-cache && echo 'APT::Install-Recommends "0";' > /etc/apt/apt.conf.d/99no-install-recommends && echo 'APT::Install-Suggests "0";' > /etc/apt/apt.conf.d/99no-install-suggests # buildkit
RUN |5 UV_VERSION=0.10.6 TARGETPLATFORM=linux/amd64 TARGETOS=linux TARGETARCH=amd64 TARGETVARIANT= /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c (echo "[i] Docker build for abx-dl starting..." && echo "PLATFORM=${TARGETPLATFORM} ARCH=$(uname -m) (${TARGETARCH} ${TARGETVARIANT})" && echo "BUILD_START_TIME=$(date +"%Y-%m-%d %H:%M:%S %s") TZ=${TZ} LANG=${LANG}" && uname -a && sed -n '1,7p' /etc/os-release ) | tee -a /VERSION.txt # buildkit
RUN |5 UV_VERSION=0.10.6 TARGETPLATFORM=linux/amd64 TARGETOS=linux TARGETARCH=amd64 TARGETVARIANT= /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c echo "[+] APT Installing abx-dl bootstrap dependencies for $TARGETPLATFORM..." && apt-get update -qq && apt-get install -qq -y ca-certificates curl dumb-init findutils util-linux procps openssl unzip xz-utils zlib1g && rm -rf /var/lib/apt/lists/* # buildkit
COPY /usr/local /opt/node # buildkit
RUN |5 UV_VERSION=0.10.6 TARGETPLATFORM=linux/amd64 TARGETOS=linux TARGETARCH=amd64 TARGETVARIANT= /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c export PATH="/opt/node/bin:$PATH" && (which node && which npm) | tee -a /VERSION.txt # buildkit
RUN |5 UV_VERSION=0.10.6 TARGETPLATFORM=linux/amd64 TARGETOS=linux TARGETARCH=amd64 TARGETVARIANT= /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c curl -LsSf "https://astral.sh/uv/${UV_VERSION}/install.sh" | env UV_INSTALL_DIR=/bin sh # buildkit
RUN |5 UV_VERSION=0.10.6 TARGETPLATFORM=linux/amd64 TARGETOS=linux TARGETARCH=amd64 TARGETVARIANT= /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c echo "[+] UV Creating /venv using python ${PYTHON_VERSION} for ${TARGETPLATFORM}..." && uv venv /venv --python "${PYTHON_VERSION}" && uv pip install setuptools pip wheel && touch -h -d "@$(date +%s)" "$(readlink -f /venv/bin/python)" && (which python3 && which uv && uv python find) | tee -a /VERSION.txt # buildkit
COPY /venv /venv # buildkit
COPY /VERSION.txt /VERSION.txt # buildkit
COPY --chown=root:root --chmod=755 bin/docker_entrypoint.sh /usr/local/bin/abx-dl-docker-entrypoint # buildkit
RUN /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c echo "[*] Setting up $ARCHIVEBOX_USER user uid=${DEFAULT_ARCHIVEBOX_UID}..." && groupadd --system "$ARCHIVEBOX_USER" && useradd --system --create-home --gid "$ARCHIVEBOX_USER" --groups audio,video "$ARCHIVEBOX_USER" && usermod -u "$DEFAULT_ARCHIVEBOX_UID" "$ARCHIVEBOX_USER" && groupmod -g "$DEFAULT_ARCHIVEBOX_GID" "$ARCHIVEBOX_USER" && install -d -o "$DEFAULT_ARCHIVEBOX_UID" -g "$DEFAULT_ARCHIVEBOX_GID" "$DATA_DIR" "$CONFIG_DIR" "$ABXPKG_LIB_DIR" && echo "ARCHIVEBOX_USER=$ARCHIVEBOX_USER ARCHIVEBOX_UID=$(id -u "$ARCHIVEBOX_USER") ARCHIVEBOX_GID=$(id -g "$ARCHIVEBOX_USER")" | tee -a /VERSION.txt # buildkit
RUN /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c echo "[+] Installing Chrome, then the complete downloader plugin catalog..." && export HOME=/var/tmp/abxpkg-cache XDG_CACHE_HOME=/var/tmp/abxpkg-cache ABXPKG_TMP_CACHE_DIR=/var/tmp/abxpkg-cache && export ABX_DOCKER_PLUGINS="$(/venv/bin/python3 -c 'from abx_dl.catalog import PluginCatalog; print(" ".join(PluginCatalog.discover(runtime="abx-dl")))')" && abx-dl install chrome && abx-dl install $ABX_DOCKER_PLUGINS && find "$ABXPKG_LIB_DIR/pnpm/packages/claudecode/node_modules" -type l -name 'claude-code-linux-*-musl' -delete && find "$ABXPKG_LIB_DIR/pnpm/packages/claudecode/node_modules/.pnpm" -maxdepth 1 -type d -name '@anthropic-ai+claude-code-linux-*-musl@*' -exec rm -rf {} + && rm -rf /usr/lib/*-linux-gnu/dri /usr/lib/*-linux-gnu/libLLVM*.so* /usr/lib/*-linux-gnu/libz3.so.* && rm -rf /usr/share/icons /usr/share/doc /usr/share/man /usr/share/bash-completion /usr/share/zsh /usr/share/info /usr/share/lintian /usr/share/bug && install -d -m 755 /usr/share/man/man1 && rm -f /usr/lib/jvm/java-*-openjdk-*/lib/server/classes*.jsa && rm -f /venv/bin/uv /venv/bin/uvx && STDLIB_DIR="$(/venv/bin/python -c 'import sysconfig; print(sysconfig.get_path("stdlib"))')" && PURELIB_DIR="$(/venv/bin/python -c 'import sysconfig; print(sysconfig.get_path("purelib"))')" && /venv/bin/python -m compileall --invalidation-mode checked-hash -q "$STDLIB_DIR" "$PURELIB_DIR" && PYTHON_LIB="$(/venv/bin/python -c 'import sys; print(f"python{sys.version_info.major}.{sys.version_info.minor}")')" && find "$ABXPKG_LIB_DIR/uv" -type d -path "*/lib/$PYTHON_LIB/site-packages" -prune -exec /venv/bin/python -m compileall --invalidation-mode checked-hash -q {} + && find "$ABXPKG_LIB_DIR" \( ! -user "$DEFAULT_ARCHIVEBOX_UID" -o ! -group "$DEFAULT_ARCHIVEBOX_GID" \) -exec chown -h "$DEFAULT_ARCHIVEBOX_UID:$DEFAULT_ARCHIVEBOX_GID" {} + && env HOME=/home/archivebox XDG_CACHE_HOME=/var/tmp/abxpkg-cache setpriv --reuid="$ARCHIVEBOX_USER" --regid="$ARCHIVEBOX_USER" --init-groups abx-dl install $ABX_DOCKER_PLUGINS && find /venv "$ABXPKG_LIB_DIR" -exec touch -h -d '@946684800' {} + && setpriv --reuid="$ARCHIVEBOX_USER" --regid="$ARCHIVEBOX_USER" --init-groups /usr/bin/uv run --no-project python -c 'import os; from pathlib import Path; from abxpkg.config import load_derived_cache, save_derived_cache; path = Path(os.environ["ABXPKG_LIB_DIR"]) / "env/derived.env"; records = load_derived_cache(path); [record.update(request_exec_projections={key: projection for key, projection in record["request_exec_projections"].items() if projection["validation"]["euid"] == os.geteuid()}) for record in records.values() if "request_exec_projections" in record]; save_derived_cache(path, records)' && find "$ABXPKG_LIB_DIR/cache" -mindepth 1 -maxdepth 1 -exec rm -rf {} + && env -u ABXPKG_TMP_CACHE_DIR HOME=/home/archivebox XDG_CACHE_HOME="$ABXPKG_LIB_DIR/cache" setpriv --reuid="$ARCHIVEBOX_USER" --regid="$ARCHIVEBOX_USER" --init-groups abx-dl install $ABX_DOCKER_PLUGINS && CACHE_BYTES="$(du -sb "$ABXPKG_LIB_DIR/cache" | cut -f1)" && (( CACHE_BYTES < 1048576 )) && rm -rf /var/lib/apt/lists/* /tmp/* # buildkit
ARG ABXBUS_VERSION
ARG DIST_ABXPKG_VERSION
ARG ABX_PLUGINS_VERSION
ARG ABX_DL_VERSION
ARG ABX_DL_COMMIT_HASH
RUN |5 ABXBUS_VERSION=2.5.77 DIST_ABXPKG_VERSION=1.13.47 ABX_PLUGINS_VERSION=1.13.255 ABX_DL_VERSION=1.13.174 ABX_DL_COMMIT_HASH=0ebb3f83d441b638da257505154db86d0927c411 /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c PURELIB_DIR="$(/venv/bin/python -c 'import sysconfig; print(sysconfig.get_path("purelib"))')" && for package_version in "abxbus|$ABXBUS_VERSION" "abxpkg|$DIST_ABXPKG_VERSION" "abx_plugins|$ABX_PLUGINS_VERSION" "abx_dl|$ABX_DL_VERSION"; do IFS='|' read -r package version <<< "$package_version"; [[ -n "$version" ]] || continue; old_name="${package}-0.0.0.dist-info"; new_name="${package}-${version}.dist-info"; cp -a "$PURELIB_DIR/$old_name" "$PURELIB_DIR/$new_name"; sed -i -E "s/^Version: .*/Version: $version/; s|^$old_name/|$new_name/|" "$PURELIB_DIR/$new_name/METADATA" "$PURELIB_DIR/$new_name/RECORD"; sed -i -E "s|^($new_name/METADATA),.*$|\1,,|" "$PURELIB_DIR/$new_name/RECORD"; rm -rf "$PURELIB_DIR/$old_name"; done # buildkit
RUN |5 ABXBUS_VERSION=2.5.77 DIST_ABXPKG_VERSION=1.13.47 ABX_PLUGINS_VERSION=1.13.255 ABX_DL_VERSION=1.13.174 ABX_DL_COMMIT_HASH=0ebb3f83d441b638da257505154db86d0927c411 /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c /usr/bin/uv --no-cache pip show abx-dl | tee -a /VERSION.txt && if [[ "$ABX_DL_COMMIT_HASH" =~ ^[0-9a-fA-F]{40}$ ]]; then echo "COMMIT_HASH=$ABX_DL_COMMIT_HASH" | tee -a /VERSION.txt; fi # buildkit
RUN |5 ABXBUS_VERSION=2.5.77 DIST_ABXPKG_VERSION=1.13.47 ABX_PLUGINS_VERSION=1.13.255 ABX_DL_VERSION=1.13.174 ABX_DL_COMMIT_HASH=0ebb3f83d441b638da257505154db86d0927c411 /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c export ABX_DOCKER_PLUGINS="$(/venv/bin/python3 -c 'from abx_dl.catalog import PluginCatalog; print(" ".join(PluginCatalog.discover(runtime="abx-dl")))')" && env -u ABXPKG_TMP_CACHE_DIR HOME=/home/archivebox setpriv --reuid="$ARCHIVEBOX_USER" --regid="$ARCHIVEBOX_USER" --init-groups bash -c '(echo -e "\n\n[+] abx-dl runtime versions" && abx-dl version && test -f "$(/venv/bin/python -c "import json; print(json.__cached__)")" && test -f "$(/venv/bin/python -c "import abxpkg.cli; print(abxpkg.cli.__cached__)")" && test -f "$(/venv/bin/python -c "import pydantic; print(pydantic.__cached__)")" && abxpkg load /opt/node/bin/node && abxpkg load /venv/bin/python3 && abx-dl plugins && abxpkg load rg && abxpkg load --binproviders=env --min-version=11.0.0 java && abxpkg run --binproviders=uv opendataloader-pdf --help && "$ABXPKG_LIB_DIR/pnpm/packages/claudecode/node_modules/.bin/claude" --version && ! command -v gcc && ! command -v g++ && ! command -v make && ! command -v cargo && ! command -v sonic && ! command -v supervisord && ! command -v opencode && test ! -e "$ABXPKG_LIB_DIR/pnpm/packages/opencode" && abx-dl install $ABX_DOCKER_PLUGINS && /usr/bin/uv run --no-project python -c "import abx_dl, abxpkg" && (find "$ABXPKG_LIB_DIR" -name derived.env -type f -exec sha256sum {} +; find "$XDG_CACHE_HOME" -type f -exec sha256sum {} +) | sort > /tmp/cache-before && abx-dl install $ABX_DOCKER_PLUGINS && (find "$ABXPKG_LIB_DIR" -name derived.env -type f -exec sha256sum {} +; find "$XDG_CACHE_HOME" -type f -exec sha256sum {} +) | sort > /tmp/cache-after && diff -u /tmp/cache-before /tmp/cache-after && rm -f /tmp/cache-before /tmp/cache-after && echo -e "\n\n[√] Finished abx-dl Docker build successfully." && echo -e "BUILD_END_TIME=$(date +"%Y-%m-%d %H:%M:%S %s")\n\n" )' | tee -a /VERSION.txt # buildkit
WORKDIR /out
VOLUME [/out]
ENTRYPOINT ["dumb-init" "--" "abx-dl-docker-entrypoint"]
CMD ["--help"]
ARG TARGETPLATFORM
ARG TARGETOS
ARG TARGETARCH
ARG TARGETVARIANT
ARG ARCHIVEBOX_COMMIT_HASH=
ENV TZ=UTC LANGUAGE=en_US:en LC_ALL=C.UTF-8 LANG=C.UTF-8 DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 PYTHONIOENCODING=UTF-8 PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1 PIP_DISABLE_PIP_VERSION_CHECK=1 PIP_NO_COMPILE=1 PIP_ONLY_BINARY=aiohttp npm_config_loglevel=error
ENV PYTHON_VERSION=3.13 NODE_VERSION=24
ENV ARCHIVEBOX_USER=archivebox DEFAULT_ARCHIVEBOX_UID=911 DEFAULT_ARCHIVEBOX_GID=911 IN_DOCKER=True
ENV CODE_DIR=/app ABX_RUNTIME=archivebox DATA_DIR=/data CONFIG_DIR=/opt/archivebox ABXPKG_LIB_DIR=/opt/archivebox/lib PLAYWRIGHT_BROWSERS_PATH=/opt/archivebox/lib/playwright/cache PERSONAS_DIR=/data/personas CHROME_HEADLESS=true CHROME_SANDBOX=false CHROME_ISOLATION=crawl CHROME_ARGS_EXTRA=["--disable-gpu","--disable-features=Translate,OptimizationGuideModelDownloading,MediaRouter"]
ENV TMP_DIR=/tmp/archivebox PIP_VENV_PYTHON=/venv/bin/python3 GOOGLE_API_KEY=no GOOGLE_DEFAULT_CLIENT_ID=no GOOGLE_DEFAULT_CLIENT_SECRET=no
ENV HOME=/home/archivebox XDG_CONFIG_HOME=/home/archivebox/.config XDG_CACHE_HOME=/opt/archivebox/lib/cache TIMEOUT=600
ENV UV_COMPILE_BYTECODE=false UV_PYTHON_PREFERENCE=managed UV_PYTHON_INSTALL_DIR=/opt/uv/python UV_LINK_MODE=copy UV_PROJECT_ENVIRONMENT=/venv VIRTUAL_ENV=/venv PATH=/venv/bin:/opt/node/bin:/venv/bin:/opt/node/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL [/bin/bash -o pipefail -o errexit -o errtrace -o nounset -c]
WORKDIR /app
RUN |5 TARGETPLATFORM=linux/amd64 TARGETOS=linux TARGETARCH=amd64 TARGETVARIANT= ARCHIVEBOX_COMMIT_HASH=64b87a6f3c3ba3e54b3aa2ab947c624f160bfd5d /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c cp /VERSION.txt /ABX-DL-VERSION.txt && (echo "[i] Docker build for ArchiveBox multistage starting..." && echo "PLATFORM=${TARGETPLATFORM} ARCH=$(uname -m) (${TARGETARCH} ${TARGETVARIANT})" && echo "BUILD_START_TIME=$(date +"%Y-%m-%d %H:%M:%S %s") TZ=${TZ} LANG=${LANG}" && uname -a && sed -n '1,7p' /etc/os-release && setpriv --reuid="$ARCHIVEBOX_USER" --regid="$ARCHIVEBOX_USER" --init-groups abxpkg load --binproviders=env node && setpriv --reuid="$ARCHIVEBOX_USER" --regid="$ARCHIVEBOX_USER" --init-groups abxpkg load --binproviders=env uv ) | tee -a /VERSION.txt # buildkit
WORKDIR /app
RUN /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c echo "[+] UV Installing ArchiveBox dependencies from pyproject.toml..." export UV_NO_CACHE=true rm -f /etc/apt/apt.conf.d/docker-clean apt-get update -qq apt-get install -qq -y --no-install-recommends x11-utils # Extend abx-dl's existing venv instead of clearing it. Clearing and later # copying a complete replacement over the base duplicates every venv byte in # the final overlay history even when most packages are unchanged. # Do not rewrite inherited native libraries merely to strip them again. /usr/bin/find /venv/lib/python3.*/site-packages -type f -name '*.so' -print > /tmp/archivebox-inherited-libraries # The old Docker-only dependency rewrite predated this checkout's lockfile: # it fetched version JSON to avoid stale PyPI Simple listings. That extra API # can itself lag or return 503s. The verified lock already records exact public # artifact URLs and hashes, including extras and platform markers. Consume it # directly, retaining the freshness check instead of resolving a second graph. /usr/bin/uv sync \ --project /app \ --locked \ --no-cache \ --no-dev \ --inexact \ --no-install-project \ --no-install-workspace \ --no-install-package abxbus \ --no-install-package abxpkg \ --no-install-package abx-plugins \ --no-install-package abx-dl \ --no-sources # Sync may replace inherited dependencies (e.g. pydantic/rich-click), removing # their bytecode. Runtime writes are disabled, so missing caches would make # every hook compile them again. Compile only missing entries: compileall's # timestamp fast path rewrites even valid checked-hash caches, copying the # entire inherited venv into this OCI layer for no runtime benefit. /usr/bin/uv run --no-project --no-sync python - <<'PY' import importlib.util from pathlib import Path import py_compile import sysconfig for source in Path(sysconfig.get_path("purelib")).rglob("*.py"): cache = Path(importlib.util.cache_from_source(str(source))) if not cache.is_file(): py_compile.compile(str(source), doraise=True, invalidation_mode=py_compile.PycInvalidationMode.CHECKED_HASH) PY builder_abxpkg_lib_dir=/tmp/archivebox-builder-abxpkg ABXPKG_NO_CACHE=True abxpkg env --install --binproviders=env,apt --lib="$builder_abxpkg_lib_dir" --overrides='{"apt":{"install_args":["binutils"]}}' strip >/dev/null /usr/bin/find /venv/lib/python3.*/site-packages -type f -name '*.so' -print0 > /tmp/archivebox-native-libraries while IFS= read -r -d '' native_library; do if grep -Fxq "$native_library" /tmp/archivebox-inherited-libraries; then continue fi magic='' if IFS= read -r -N 4 magic < "$native_library" && [[ "$magic" == $'\x7fELF' ]]; then "$builder_abxpkg_lib_dir/env/bin/strip" --strip-unneeded "$native_library" || exit $? fi done < /tmp/archivebox-native-libraries rm -f /tmp/archivebox-native-libraries /tmp/archivebox-inherited-libraries rm -f /venv/bin/uv /venv/bin/uvx abxpkg run --binproviders=env --lib="$builder_abxpkg_lib_dir" apt-get purge -y binutils abxpkg run --binproviders=env --lib="$builder_abxpkg_lib_dir" apt-get autoremove -y rm -rf "$builder_abxpkg_lib_dir" rm -rf /venv/lib/python3.*/site-packages/pip* \ /venv/lib/python3.*/site-packages/wheel* \ /venv/bin/pip /venv/bin/pip3 /venv/bin/pip3.* /venv/bin/wheel rm -rf /var/lib/apt/lists/* # buildkit
COPY --chown=root:root --chmod=755 . /app/ # buildkit
RUN /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c echo "[*] Installing ArchiveBox Python source code from $CODE_DIR..." && COMMIT_HASH="$( if [[ "$ARCHIVEBOX_COMMIT_HASH" =~ ^[0-9a-fA-F]{40}$ ]]; then echo "$ARCHIVEBOX_COMMIT_HASH"; elif [[ -f "$CODE_DIR/.git/HEAD" ]]; then HEAD_REF="$(cat "$CODE_DIR/.git/HEAD")"; if [[ "$HEAD_REF" =~ ^[0-9a-fA-F]{40}$ ]]; then echo "$HEAD_REF"; elif [[ "$HEAD_REF" == ref:\ * ]]; then REF_PATH="${HEAD_REF#ref: }"; cat "$CODE_DIR/.git/$REF_PATH" 2>/dev/null || awk -v ref="$REF_PATH" '$2 == ref {print $1}' "$CODE_DIR/.git/packed-refs" 2>/dev/null || true; fi; fi)" && if [[ "$COMMIT_HASH" =~ ^[0-9a-fA-F]{40}$ ]]; then echo "COMMIT_HASH=$COMMIT_HASH" | tee -a /VERSION.txt; fi && /usr/bin/uv pip install --no-cache --no-deps "$CODE_DIR" && rm -f /venv/bin/uv /venv/bin/uvx && cd / && ARCHIVEBOX_PY_DIR="$(/venv/bin/python -c 'import pathlib, archivebox; print(pathlib.Path(archivebox.__file__).parent)')" && /venv/bin/python -m compileall --invalidation-mode checked-hash -q "$ARCHIVEBOX_PY_DIR" && test -f "$(/venv/bin/python -c 'import archivebox; print(archivebox.__cached__)')" && /usr/bin/uv pip show archivebox | tee -a /VERSION.txt # buildkit
LABEL name=archivebox maintainer=Nick Sweeting <dockerfile@archivebox.io> description=All-in-one self-hosted internet archiving solution homepage=https://github.com/ArchiveBox/ArchiveBox documentation=https://github.com/ArchiveBox/ArchiveBox/wiki/Docker org.opencontainers.image.title=ArchiveBox org.opencontainers.image.vendor=ArchiveBox org.opencontainers.image.description=All-in-one self-hosted internet archiving solution org.opencontainers.image.source=https://github.com/ArchiveBox/ArchiveBox com.docker.image.source.entrypoint=Dockerfile
COPY /usr/local/bin/sonic /usr/local/bin/sonic # buildkit
COPY --chown=root:root --chmod=755 etc/sonic.cfg /etc/sonic.cfg # buildkit
RUN /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c echo "[*] Setting up $ARCHIVEBOX_USER user uid=${DEFAULT_ARCHIVEBOX_UID}..." && printf 'export PATH="/venv/bin:/opt/node/bin:$PATH"\n' > /etc/profile.d/archivebox-path.sh && ln -sf /venv/bin/archivebox /usr/local/bin/archivebox && ln -sf /venv/bin/daphne /usr/local/bin/daphne && ln -sf /venv/bin/supervisord /usr/local/bin/supervisord && ln -sf /venv/bin/supervisorctl /usr/local/bin/supervisorctl && getent group "$ARCHIVEBOX_USER" >/dev/null || groupadd --system "$ARCHIVEBOX_USER" && id -u "$ARCHIVEBOX_USER" >/dev/null 2>&1 || useradd --system --create-home --gid "$ARCHIVEBOX_USER" --groups audio,video "$ARCHIVEBOX_USER" && usermod --append --groups audio,video "$ARCHIVEBOX_USER" && [[ "$(id -u "$ARCHIVEBOX_USER")" == "$DEFAULT_ARCHIVEBOX_UID" ]] || usermod -u "$DEFAULT_ARCHIVEBOX_UID" "$ARCHIVEBOX_USER" && [[ "$(id -g "$ARCHIVEBOX_USER")" == "$DEFAULT_ARCHIVEBOX_GID" ]] || groupmod -g "$DEFAULT_ARCHIVEBOX_GID" "$ARCHIVEBOX_USER" && install -d -o "$DEFAULT_ARCHIVEBOX_UID" -g "$DEFAULT_ARCHIVEBOX_GID" "$DATA_DIR" "$TMP_DIR" "$CONFIG_DIR" "$ABXPKG_LIB_DIR" "$XDG_CACHE_HOME" "$PLAYWRIGHT_BROWSERS_PATH" && install -d -o "$DEFAULT_ARCHIVEBOX_UID" -g "$DEFAULT_ARCHIVEBOX_GID" "/home/$ARCHIVEBOX_USER" && chown "$DEFAULT_ARCHIVEBOX_UID:$DEFAULT_ARCHIVEBOX_GID" "$DATA_DIR" "$TMP_DIR" && find "$ABXPKG_LIB_DIR" \( ! -user "$DEFAULT_ARCHIVEBOX_UID" -o ! -group "$DEFAULT_ARCHIVEBOX_GID" \) -exec chown -h "$DEFAULT_ARCHIVEBOX_UID:$DEFAULT_ARCHIVEBOX_GID" {} + && UV_NO_CACHE=true setpriv --reuid="$ARCHIVEBOX_USER" --regid="$ARCHIVEBOX_USER" --init-groups abxpkg load --binproviders=env sonic | tee -a /VERSION.txt && openssl rand -hex 16 > /etc/machine-id && echo -e "\nARCHIVEBOX_USER=$ARCHIVEBOX_USER ARCHIVEBOX_UID=$(id -u "$ARCHIVEBOX_USER") ARCHIVEBOX_GID=$(id -g "$ARCHIVEBOX_USER")" | tee -a /VERSION.txt && echo -e "TMP_DIR=$TMP_DIR\nABXPKG_LIB_DIR=$ABXPKG_LIB_DIR\nPLAYWRIGHT_BROWSERS_PATH=$PLAYWRIGHT_BROWSERS_PATH\nMACHINE_ID=$(cat /etc/machine-id)\n" | tee -a /VERSION.txt # buildkit
RUN /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c chown -R "$DEFAULT_ARCHIVEBOX_UID:$DEFAULT_ARCHIVEBOX_GID" /var/tmp/abxpkg-cache && chmod 1777 /var/tmp/abxpkg-cache && export ABX_DOCKER_PLUGINS="$(/venv/bin/python3 -c 'from abx_dl.catalog import PluginCatalog; print(" ".join(PluginCatalog.discover(runtime="archivebox")))')" && env ABXPKG_TMP_CACHE_DIR=/var/tmp/abxpkg-cache XDG_CACHE_HOME=/var/tmp/abxpkg-cache abx-dl install $ABX_DOCKER_PLUGINS && find "$CONFIG_DIR" "$HOME" \( ! -user "$DEFAULT_ARCHIVEBOX_UID" -o ! -group "$DEFAULT_ARCHIVEBOX_GID" \) -exec chown -h "$DEFAULT_ARCHIVEBOX_UID:$DEFAULT_ARCHIVEBOX_GID" {} + && UV_NO_CACHE=true /usr/bin/uv run --no-project python -c 'from abx_plugins.plugins.opencode.image import prune_incompatible_image_files; prune_incompatible_image_files()' && rm -rf "$ABXPKG_LIB_DIR/cache/pnpm" "$ABXPKG_LIB_DIR/cache/uv" /var/cache/apt/* /var/lib/apt/lists/* # buildkit
RUN /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c export ABX_DOCKER_PLUGINS="$(/venv/bin/python3 -c 'from abx_dl.catalog import PluginCatalog; print(" ".join(PluginCatalog.discover(runtime="archivebox")))')" && setpriv --reuid="$ARCHIVEBOX_USER" --regid="$ARCHIVEBOX_USER" --init-groups bash -c 'uv run --no-project python -c "from abx_plugins.plugins.opencode.image import verify_installed; verify_installed()" && abx-dl install $ABX_DOCKER_PLUGINS' # buildkit
WORKDIR /data
RUN /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c echo "[+] Initializing image collection..." && find "$DATA_DIR" -mindepth 1 -maxdepth 1 -exec rm -rf {} + && HOME="$TMP_DIR" archivebox init && (chown "$DEFAULT_ARCHIVEBOX_UID:$DEFAULT_ARCHIVEBOX_GID" "$DATA_DIR" "$DATA_DIR"/.archivebox_id "$DATA_DIR"/ArchiveBox.conf "$DATA_DIR"/index.sqlite3 "$DATA_DIR"/logs "$DATA_DIR"/logs/* "$DATA_DIR"/sources "$DATA_DIR"/archive "$DATA_DIR"/archive/users "$DATA_DIR"/personas "$DATA_DIR"/tmp "$DATA_DIR"/tmp/* "$CONFIG_DIR" "$CONFIG_DIR"/config.env "$CONFIG_DIR"/derived.env "$TMP_DIR" "$ABXPKG_LIB_DIR" "$XDG_CACHE_HOME" "$PLAYWRIGHT_BROWSERS_PATH" 2>/dev/null || true) && find "$TMP_DIR" -mindepth 1 -maxdepth 1 -exec rm -rf {} + # buildkit
RUN /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c chmod +x "$CODE_DIR"/bin/*.sh && chmod g+w "$TMP_DIR" "$ABXPKG_LIB_DIR" "$PLAYWRIGHT_BROWSERS_PATH" # buildkit
RUN /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c for forbidden_bin in gcc g++ make; do ! abxpkg load --binproviders=env "$forbidden_bin" >/dev/null 2>&1 || (echo "Unexpected build tool in runtime: $forbidden_bin" >&2 && exit 1); done && test -f "$(/venv/bin/python -c 'import pydantic; print(pydantic.__cached__)')" && test -f "$(/venv/bin/python -c 'import rich_click; print(rich_click.__cached__)')" && test -f "$(/venv/bin/python -c 'import platformdirs; print(platformdirs.__cached__)')" && stat -c "%U:%G %a %n" "$CONFIG_DIR" "$ABXPKG_LIB_DIR" "$PLAYWRIGHT_BROWSERS_PATH" && setpriv --reuid="$ARCHIVEBOX_USER" --regid="$ARCHIVEBOX_USER" --init-groups test -w "$CONFIG_DIR" && setpriv --reuid="$ARCHIVEBOX_USER" --regid="$ARCHIVEBOX_USER" --init-groups test -w "$ABXPKG_LIB_DIR" && setpriv --reuid="$ARCHIVEBOX_USER" --regid="$ARCHIVEBOX_USER" --init-groups archivebox install && setpriv --reuid="$ARCHIVEBOX_USER" --regid="$ARCHIVEBOX_USER" --init-groups archivebox version 2>&1 | tee -a /VERSION.txt && rm -rf /root/.cache /var/cache/apt/* /var/lib/apt/lists/* # buildkit
RUN /bin/bash -o pipefail -o errexit -o errtrace -o nounset -c (echo -e "\n\n[√] Finished ArchiveBox multistage Docker build successfully." && echo -e "PLATFORM=${TARGETPLATFORM} ARCH=$(uname -m) (${TARGETARCH} ${TARGETVARIANT})" && echo -e "BUILD_END_TIME=$(date +"%Y-%m-%d %H:%M:%S %s")\n\n" ) | tee -a /VERSION.txt # buildkit
WORKDIR /data
VOLUME [/data]
EXPOSE map[5797/tcp:{}]
HEALTHCHECK &{["CMD-SHELL" "curl --fail --silent --show-error --max-time 5 --connect-timeout 2 'http://admin.archivebox.localhost:5797/health/' | grep -q 'OK'"] "30s" "20s" "0s" "0s" '\x0f'}
ENTRYPOINT ["dumb-init" "--" "/app/bin/docker_entrypoint.sh"]
CMD ["archivebox" "server" "--init" "0.0.0.0:5797"]

Labels

Key Value
com.docker.image.source.entrypoint Dockerfile
description All-in-one self-hosted internet archiving solution
documentation https://github.com/ArchiveBox/ArchiveBox/wiki/Docker
homepage https://github.com/ArchiveBox/ArchiveBox
io.archivebox.abx-dl.image archivebox/abx-dl:1.13.174@sha256:d398e005ebb13aa60402409f4506549327d1fc0f18cda247605ab9c8c6ca821f
maintainer Nick Sweeting <dockerfile@archivebox.io>
name archivebox
org.opencontainers.image.description All-in-one self-hosted internet archiving solution
org.opencontainers.image.revision 64b87a6f3c3ba3e54b3aa2ab947c624f160bfd5d
org.opencontainers.image.source https://github.com/ArchiveBox/ArchiveBox
org.opencontainers.image.title ArchiveBox
org.opencontainers.image.vendor ArchiveBox
org.opencontainers.image.version 0.9.74rc134
Details
Container
2026-10-13 02:36:21 +00:00
0
OCI / Docker
linux/amd64
1,016 MiB
Versions (15) View all
1021 2026-10-21
latest 2026-10-21
1020 2026-10-20
1019 2026-10-19
1018 2026-10-18