This is an automated email from the ASF dual-hosted git repository.

tballison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika-docker.git


The following commit(s) were added to refs/heads/main by this push:
     new 42c6f2e  update versions for 4.0.0-alpha-1 release
42c6f2e is described below

commit 42c6f2ec9939f5d17e574b79ef5db4c69f81246b
Author: tallison <[email protected]>
AuthorDate: Mon May 11 15:46:06 2026 -0400

    update versions for 4.0.0-alpha-1 release
---
 CHANGES.md         |  7 +++++++
 README.md          | 33 +++++++++++++++++++++++++++++++--
 docker-tool.sh     | 51 +++++++++++++++++++++++++++++++++++++++++++++++----
 full/Dockerfile    | 47 +++++++++++++++++++++++++++++------------------
 minimal/Dockerfile | 48 +++++++++++++++++++++++++++++-------------------
 5 files changed, 143 insertions(+), 43 deletions(-)

diff --git a/CHANGES.md b/CHANGES.md
index 6f55412..eb6ce31 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -4,6 +4,13 @@ As of 2.5.0.1, we started adding a digit for Docker versions.  
Going forward, we
 a four digit version, where the first three are the Tika version and the last 
one is the docker version.
 As of 2.5.0.2, we started tagging release commits in our github repo.
 
+* 4.0.0-alpha-1.0 (9 May 2026)
+  * First 4.0.0-alpha-1 release (preview; not tagged `latest`)
+  * Dropped `linux/arm/v7` from the published platforms. 32-bit ARM emulated
+    builds on Ubuntu 26.04 (resolute) hit a qemu chown-overflow in
+    `update-notifier-common`'s postinst, which is pulled in by
+    `ttf-mscorefonts-installer`. `linux/arm64/v8` covers modern ARM.
+
 * 3.3.0.0 (23 Mar 2026)
   * First 3.3.0 release
   
diff --git a/README.md b/README.md
index 25f8ed2..59b6c6f 100644
--- a/README.md
+++ b/README.md
@@ -16,9 +16,12 @@ To install more languages, set the build argument 
`LANGUAGES` or include your ow
 
 ## Available Tags
 
-Below are the most recent 3.x series tags:
+Below are the most recent tags. The `latest` tags track the 3.x stable line;
+4.x preview releases are published as version-specific tags only.
 - `latest`, `3.3.0.0`: Apache Tika Server 3.3.0.0 (Minimal)
 - `latest-full`, `3.3.0.0-full`: Apache Tika Server 3.3.0.0 (Full)
+- `4.0.0-alpha-1.0`: Apache Tika Server 4.0.0-alpha-1.0 (Minimal, 4.x preview)
+- `4.0.0-alpha-1.0-full`: Apache Tika Server 4.0.0-alpha-1.0 (Full, 4.x 
preview)
 - `3.3.0.0`, `3.3.0.0`: Apache Tika Server 3.3.0.0 (Minimal)
 - `3.3.0.0`, `3.3.0.0-full`: Apache Tika Server 3.3.0.0 (Full)
 - `3.2.3.0`, `3.2.3.0`: Apache Tika Server 3.2.3.0 (Minimal)
@@ -83,15 +86,41 @@ Below are the most recent 1.x series tags. **Note** that as 
of 30 September 2022
 
 You can see a full set of tags for historical versions 
[here](https://hub.docker.com/r/apache/tika/tags?page=1&ordering=last_updated).
 
+## 4.x Preview Notes
+
+The `4.0.0-alpha-1.0` images are a preview of the upcoming Tika 4.x line and 
are
+not tagged `latest`.
+
+Tika 4.x changed the `tika-server-standard` packaging: the published jar is now
+a thin top-level jar that resolves its dependencies from a sibling `lib/`
+directory. The 4.x image therefore ships the unpacked 
`tika-server-standard-bin.zip`
+distribution under `/opt/tika-server/` (containing `tika-server.jar`, `lib/`,
+and `plugins/`) instead of a single fat jar.
+
+The standard REST endpoints (`/tika`, `/rmeta`, `/unpack`, `/detect`, etc.)
+work as in 3.x — they spool the request body to a temp file internally via
+`TikaInputStream` and do not require any pipes plugin.
+
+Pipes-mode endpoints (`/pipes`, `/async`) require pf4j plugins. The
+`tika-pipes-file-system` plugin is **bundled** under
+`/opt/tika-server/plugins/tika-pipes-file-system/` (it ships inside the
+upstream `tika-server-standard-bin.zip`). Other pipes plugins
+(`tika-pipes-http`, `tika-pipes-s3`, etc.) are not currently bundled in the
+preview image; mount them into `/opt/tika-server/plugins/` if you need them.
+Bundling additional common plugins is planned for `4.0.0-beta-1.0`.
+
 ## Supported Platforms
 
 The Docker images are published as multi-platform images supporting the 
following architectures:
 
 - `linux/amd64` - 64-bit x86 processors (Intel/AMD)
-- `linux/arm/v7` - 32-bit ARM processors
 - `linux/arm64/v8` - 64-bit ARM processors (Apple Silicon, AWS Graviton, etc.)
 - `linux/s390x` - IBM System z mainframes
 
+NOTE: `linux/arm/v7` was published for 3.x but dropped starting with 
`4.0.0-alpha-1.0`.
+If you need 32-bit ARM, pin to a 3.x tag. The drop was driven by a qemu/dpkg
+emulation bug that broke font-package installation on the Ubuntu 26.04 base.
+
 Docker will automatically pull the correct image for your platform when you 
use `docker pull` or `docker run`.
 
 ## Usage
diff --git a/docker-tool.sh b/docker-tool.sh
index 2a82b5f..f03e277 100755
--- a/docker-tool.sh
+++ b/docker-tool.sh
@@ -36,6 +36,8 @@ while getopts ":h" opt; do
       echo "    docker-tool.sh -h                      Display this help 
message."
       echo "    docker-tool.sh build <TIKA_DOCKER_VERSION> <TIKA_VERSION>   
Builds <TIKA_DOCKER_VERSION> images for <TIKA_VERSION>."
       echo "    docker-tool.sh test <TIKA_DOCKER_VERSION>     Tests images for 
<TIKA_DOCKER_VERSION>."
+      echo "    docker-tool.sh test-uat <TIKA_DOCKER_VERSION> Runs the 
tika-server REST UAT against images for <TIKA_DOCKER_VERSION>."
+      echo "                                                  Requires 
TIKA_MAIN env var or sibling tika-main checkout (../tika-main)."
       echo "    docker-tool.sh publish <TIKA_DOCKER_VERSION> <TIKA_VERSION> 
Builds multi-arch images for <TIKA_DOCKER_VERSION> and pushes to Docker Hub."
       exit 0
       ;;
@@ -98,6 +100,35 @@ test_docker_image() {
   stop_test_container "$container_name"
 }
 
+test_docker_image_uat() {
+  container_name=$1
+  image=$image_name:$1
+  uat_script=$2
+
+  docker run -d --name "$container_name" -p 127.0.0.1:9998:9998 "$image" \
+    || die "couldn't start $image"
+
+  # Wait up to 30s for /version to respond.
+  for i in $(seq 1 30); do
+    if curl -fsS --max-time 2 http://localhost:9998/version >/dev/null 2>&1; 
then
+      break
+    fi
+    sleep 1
+  done
+
+  if "$uat_script" http://localhost:9998; then
+    echo "$(tput setaf 2)Image: $image - UAT passed$(tput sgr0)"
+    stop_test_container "$container_name"
+  else
+    echo "$(tput setaf 1)Image: $image - UAT failed$(tput sgr0)"
+    echo "--- last 40 lines of container log ---"
+    docker logs --tail 40 "$container_name" || true
+    echo "--- end log ---"
+    stop_test_container "$container_name"
+    exit 1
+  fi
+}
+
 shift $((OPTIND -1))
 subcommand=$1; shift
 tika_docker_version=$1; shift
@@ -118,13 +149,25 @@ case "$subcommand" in
     test_docker_image "${tika_docker_version}-full" true
     ;;
 
+  test-uat)
+    # Run the tika-server REST UAT (release-tools/uat/run-uat.sh from 
tika-main)
+    # against both images. Locate the script via $TIKA_MAIN or sibling 
checkout.
+    tika_main_dir="${TIKA_MAIN:-$(cd "$(dirname "$0")/.." && pwd)/tika-main}"
+    uat_script="${tika_main_dir}/release-tools/uat/run-uat.sh"
+    if [[ ! -x "$uat_script" ]]; then
+      die "UAT script not found or not executable: $uat_script (set TIKA_MAIN 
env var to your tika-main checkout)"
+    fi
+    test_docker_image_uat ${tika_docker_version} "$uat_script"
+    test_docker_image_uat "${tika_docker_version}-full" "$uat_script"
+    ;;
+
   publish)
     docker buildx create --use --name tika-builder || die "couldn't create 
builder"
     # Build multi-arch with buildx and push
-    docker buildx build --platform 
linux/arm/v7,linux/arm64/v8,linux/amd64,linux/s390x --output 
"type=image,push=true" \
-      --tag ${image_name}:latest --tag ${image_name}:${tika_docker_version} 
--build-arg TIKA_VERSION=${tika_version} --no-cache --builder tika-builder 
minimal || stop_and_die "couldn't build multi-arch minimal"
-    docker buildx build --platform 
linux/arm/v7,linux/arm64/v8,linux/amd64,linux/s390x --output 
"type=image,push=true" \
-      --tag ${image_name}:latest-full --tag 
${image_name}:${tika_docker_version}-full --build-arg 
TIKA_VERSION=${tika_version} --no-cache --builder tika-builder full || 
stop_and_die "couldn't build multi-arch full"
+    docker buildx build --platform linux/arm64/v8,linux/amd64,linux/s390x 
--output "type=image,push=true" \
+      --tag ${image_name}:${tika_docker_version} --build-arg 
TIKA_VERSION=${tika_version} --no-cache --builder tika-builder minimal || 
stop_and_die "couldn't build multi-arch minimal"
+    docker buildx build --platform linux/arm64/v8,linux/amd64,linux/s390x 
--output "type=image,push=true" \
+      --tag ${image_name}:${tika_docker_version}-full --build-arg 
TIKA_VERSION=${tika_version} --no-cache --builder tika-builder full || 
stop_and_die "couldn't build multi-arch full"
     docker buildx rm tika-builder || die "couldn't stop builder -- make sure 
to stop the builder manually! "
     ;;
 
diff --git a/full/Dockerfile b/full/Dockerfile
index 889a060..8783c23 100644
--- a/full/Dockerfile
+++ b/full/Dockerfile
@@ -22,25 +22,30 @@ FROM base AS fetch_tika
 ARG TIKA_VERSION
 ARG CHECK_SIG=true
 
-ENV 
NEAREST_TIKA_SERVER_URL="https://dlcdn.apache.org/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}.jar";
 \
-    
ARCHIVE_TIKA_SERVER_URL="https://archive.apache.org/dist/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}.jar";
 \
-    
BACKUP_TIKA_SERVER_URL="https://downloads.apache.org/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}.jar";
 \
-    
DEFAULT_TIKA_SERVER_ASC_URL="https://downloads.apache.org/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}.jar.asc";
 \
-    
ARCHIVE_TIKA_SERVER_ASC_URL="https://archive.apache.org/dist/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}.jar.asc";
 \
+ENV TIKA_SERVER_ARCHIVE="tika-server-standard-${TIKA_VERSION}-bin.zip" \
+    
NEAREST_TIKA_SERVER_URL="https://dlcdn.apache.org/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}-bin.zip";
 \
+    
ARCHIVE_TIKA_SERVER_URL="https://archive.apache.org/dist/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}-bin.zip";
 \
+    
BACKUP_TIKA_SERVER_URL="https://downloads.apache.org/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}-bin.zip";
 \
+    
DEFAULT_TIKA_SERVER_ASC_URL="https://downloads.apache.org/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}-bin.zip.asc";
 \
+    
ARCHIVE_TIKA_SERVER_ASC_URL="https://archive.apache.org/dist/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}-bin.zip.asc";
 \
     TIKA_VERSION=$TIKA_VERSION
 
-RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get -y install gnupg2 
wget ca-certificates \
+# 4.x publishes tika-server as a bin.zip distribution. The thin top-level
+# tika-server.jar uses its manifest Class-Path to resolve the jars under lib/,
+# and tika-server reads pf4j plugins from the plugins/ directory next to it.
+RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get -y install gnupg2 
wget ca-certificates unzip \
     && wget -t 10 --max-redirect 1 --retry-connrefused -qO- 
https://downloads.apache.org/tika/KEYS | gpg --import \
-    && wget -t 10 --max-redirect 1 --retry-connrefused 
$NEAREST_TIKA_SERVER_URL -O /tika-server-standard-${TIKA_VERSION}.jar || rm 
/tika-server-standard-${TIKA_VERSION}.jar \
-    && sh -c "[ -f /tika-server-standard-${TIKA_VERSION}.jar ]" || wget 
$ARCHIVE_TIKA_SERVER_URL -O /tika-server-standard-${TIKA_VERSION}.jar || rm 
/tika-server-standard-${TIKA_VERSION}.jar \
-    && sh -c "[ -f /tika-server-standard-${TIKA_VERSION}.jar ]" || wget 
$BACKUP_TIKA_SERVER_URL -O /tika-server-standard-${TIKA_VERSION}.jar || rm 
/tika-server-standard-${TIKA_VERSION}.jar \
-    && sh -c "[ -f /tika-server-standard-${TIKA_VERSION}.jar ]" || exit 1 \
-    && wget -t 10 --max-redirect 1 --retry-connrefused 
$DEFAULT_TIKA_SERVER_ASC_URL -O /tika-server-standard-${TIKA_VERSION}.jar.asc  
|| rm /tika-server-standard-${TIKA_VERSION}.jar.asc \
-    && sh -c "[ -f /tika-server-standard-${TIKA_VERSION}.jar.asc ]" || wget 
$ARCHIVE_TIKA_SERVER_ASC_URL -O /tika-server-standard-${TIKA_VERSION}.jar.asc 
|| rm /tika-server-standard-${TIKA_VERSION}.jar.asc \
-    && sh -c "[ -f /tika-server-standard-${TIKA_VERSION}.jar.asc ]" || exit 1 \
-    && gpg --verify /tika-server-standard-${TIKA_VERSION}.jar.asc 
/tika-server-standard-${TIKA_VERSION}.jar
-
-#RUN if [ "$CHECK_SIG" = "true" ] ; then gpg --verify 
/tika-server-standard-${TIKA_VERSION}.jar.asc 
/tika-server-standard-${TIKA_VERSION}.jar; fi
+    && wget -t 10 --max-redirect 1 --retry-connrefused 
$NEAREST_TIKA_SERVER_URL -O /${TIKA_SERVER_ARCHIVE} || rm 
/${TIKA_SERVER_ARCHIVE} \
+    && sh -c "[ -f /${TIKA_SERVER_ARCHIVE} ]" || wget $ARCHIVE_TIKA_SERVER_URL 
-O /${TIKA_SERVER_ARCHIVE} || rm /${TIKA_SERVER_ARCHIVE} \
+    && sh -c "[ -f /${TIKA_SERVER_ARCHIVE} ]" || wget $BACKUP_TIKA_SERVER_URL 
-O /${TIKA_SERVER_ARCHIVE} || rm /${TIKA_SERVER_ARCHIVE} \
+    && sh -c "[ -f /${TIKA_SERVER_ARCHIVE} ]" || exit 1 \
+    && wget -t 10 --max-redirect 1 --retry-connrefused 
$DEFAULT_TIKA_SERVER_ASC_URL -O /${TIKA_SERVER_ARCHIVE}.asc || rm 
/${TIKA_SERVER_ARCHIVE}.asc \
+    && sh -c "[ -f /${TIKA_SERVER_ARCHIVE}.asc ]" || wget 
$ARCHIVE_TIKA_SERVER_ASC_URL -O /${TIKA_SERVER_ARCHIVE}.asc || rm 
/${TIKA_SERVER_ARCHIVE}.asc \
+    && sh -c "[ -f /${TIKA_SERVER_ARCHIVE}.asc ]" || exit 1 \
+    && gpg --verify /${TIKA_SERVER_ARCHIVE}.asc /${TIKA_SERVER_ARCHIVE} \
+    && mkdir -p /opt/tika-server \
+    && unzip -q /${TIKA_SERVER_ARCHIVE} -d /opt/tika-server \
+    && rm /${TIKA_SERVER_ARCHIVE} /${TIKA_SERVER_ARCHIVE}.asc
 
 FROM base AS runtime
 ARG UID_GID
@@ -68,11 +73,17 @@ RUN set -eux \
 ARG TIKA_VERSION
 ENV TIKA_VERSION=$TIKA_VERSION
 
-COPY --from=fetch_tika /tika-server-standard-${TIKA_VERSION}.jar 
/tika-server-standard-${TIKA_VERSION}.jar
+COPY --from=fetch_tika /opt/tika-server /opt/tika-server
+# WORKDIR sets the CWD so tika-server's plugin-root fallback resolves
+# `plugins/` relative to /opt/tika-server (its `getCodeSource()` returns a
+# lib/* path, not the top-level jar, so the "next-to-jar" resolution misses).
+WORKDIR /opt/tika-server
 USER $UID_GID
 
 EXPOSE 9998
-ENTRYPOINT [ "/bin/sh", "-c", "exec java -cp 
\"/tika-server-standard-${TIKA_VERSION}.jar:/tika-extras/*\" 
org.apache.tika.server.core.TikaServerCli -h 0.0.0.0 $0 $@"]
+# Classpath includes the thin server jar, its lib/ deps, and any user-mounted 
/tika-extras/.
+# tika-server auto-discovers pf4j plugins from /opt/tika-server/plugins/.
+ENTRYPOINT [ "/bin/sh", "-c", "exec java -cp 
\"/opt/tika-server/tika-server.jar:/opt/tika-server/lib/*:/tika-extras/*\" 
org.apache.tika.server.core.TikaServerCli -h 0.0.0.0 $0 $@"]
 
 LABEL maintainer="Apache Tika Developers [email protected]"
 
diff --git a/minimal/Dockerfile b/minimal/Dockerfile
index af1661b..0ec639b 100644
--- a/minimal/Dockerfile
+++ b/minimal/Dockerfile
@@ -23,32 +23,36 @@ FROM base AS fetch_tika
 ARG TIKA_VERSION
 ARG CHECK_SIG=true
 
-ENV 
NEAREST_TIKA_SERVER_URL="https://dlcdn.apache.org/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}.jar";
 \
-    
ARCHIVE_TIKA_SERVER_URL="https://archive.apache.org/dist/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}.jar";
 \
-    
BACKUP_TIKA_SERVER_URL="https://downloads.apache.org/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}.jar";
 \
-    
DEFAULT_TIKA_SERVER_ASC_URL="https://downloads.apache.org/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}.jar.asc";
 \
-    
ARCHIVE_TIKA_SERVER_ASC_URL="https://archive.apache.org/dist/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}.jar.asc";
 \
+ENV TIKA_SERVER_ARCHIVE="tika-server-standard-${TIKA_VERSION}-bin.zip" \
+    
NEAREST_TIKA_SERVER_URL="https://dlcdn.apache.org/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}-bin.zip";
 \
+    
ARCHIVE_TIKA_SERVER_URL="https://archive.apache.org/dist/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}-bin.zip";
 \
+    
BACKUP_TIKA_SERVER_URL="https://downloads.apache.org/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}-bin.zip";
 \
+    
DEFAULT_TIKA_SERVER_ASC_URL="https://downloads.apache.org/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}-bin.zip.asc";
 \
+    
ARCHIVE_TIKA_SERVER_ASC_URL="https://archive.apache.org/dist/tika/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}-bin.zip.asc";
 \
     TIKA_VERSION=$TIKA_VERSION
 
+# 4.x publishes tika-server as a bin.zip distribution. The thin top-level
+# tika-server.jar uses its manifest Class-Path to resolve the jars under lib/,
+# and tika-server reads pf4j plugins from the plugins/ directory next to it.
 RUN set -eux \
     && apt-get update \
     && DEBIAN_FRONTEND=noninteractive apt-get install --yes 
--no-install-recommends \
         gnupg2 \
         wget \
         ca-certificates \
+        unzip \
     && wget -t 10 --max-redirect 1 --retry-connrefused -qO- 
https://downloads.apache.org/tika/KEYS | gpg --import \
-    && wget -t 10 --max-redirect 1 --retry-connrefused 
$NEAREST_TIKA_SERVER_URL -O /tika-server-standard-${TIKA_VERSION}.jar || rm 
/tika-server-standard-${TIKA_VERSION}.jar \
-    && sh -c "[ -f /tika-server-standard-${TIKA_VERSION}.jar ]" || wget 
$ARCHIVE_TIKA_SERVER_URL -O /tika-server-standard-${TIKA_VERSION}.jar || rm 
/tika-server-standard-${TIKA_VERSION}.jar \
-    && sh -c "[ -f /tika-server-standard-${TIKA_VERSION}.jar ]" || wget 
$BACKUP_TIKA_SERVER_URL -O /tika-server-standard-${TIKA_VERSION}.jar || rm 
/tika-server-standard-${TIKA_VERSION}.jar \
-    && sh -c "[ -f /tika-server-standard-${TIKA_VERSION}.jar ]" || exit 1 \
-    && wget -t 10 --max-redirect 1 --retry-connrefused 
$DEFAULT_TIKA_SERVER_ASC_URL -O /tika-server-standard-${TIKA_VERSION}.jar.asc  
|| rm /tika-server-standard-${TIKA_VERSION}.jar.asc \
-    && sh -c "[ -f /tika-server-standard-${TIKA_VERSION}.jar.asc ]" || wget 
$ARCHIVE_TIKA_SERVER_ASC_URL -O /tika-server-standard-${TIKA_VERSION}.jar.asc 
|| rm /tika-server-standard-${TIKA_VERSION}.jar.asc \
-    && sh -c "[ -f /tika-server-standard-${TIKA_VERSION}.jar.asc ]" || exit 1 \
-    && gpg --verify /tika-server-standard-${TIKA_VERSION}.jar.asc 
/tika-server-standard-${TIKA_VERSION}.jar
-
-# this used to work, but I'm getting "ERROR: failed to solve: failed to 
prepare $data as $data2: invalid argument"
-# when trying to build 2.9.2.0
-#RUN if [ "$CHECK_SIG" = "true" ] ; then gpg --verify 
/tika-server-standard-${TIKA_VERSION}.jar.asc 
/tika-server-standard-${TIKA_VERSION}.jar; fi
+    && wget -t 10 --max-redirect 1 --retry-connrefused 
$NEAREST_TIKA_SERVER_URL -O /${TIKA_SERVER_ARCHIVE} || rm 
/${TIKA_SERVER_ARCHIVE} \
+    && sh -c "[ -f /${TIKA_SERVER_ARCHIVE} ]" || wget $ARCHIVE_TIKA_SERVER_URL 
-O /${TIKA_SERVER_ARCHIVE} || rm /${TIKA_SERVER_ARCHIVE} \
+    && sh -c "[ -f /${TIKA_SERVER_ARCHIVE} ]" || wget $BACKUP_TIKA_SERVER_URL 
-O /${TIKA_SERVER_ARCHIVE} || rm /${TIKA_SERVER_ARCHIVE} \
+    && sh -c "[ -f /${TIKA_SERVER_ARCHIVE} ]" || exit 1 \
+    && wget -t 10 --max-redirect 1 --retry-connrefused 
$DEFAULT_TIKA_SERVER_ASC_URL -O /${TIKA_SERVER_ARCHIVE}.asc || rm 
/${TIKA_SERVER_ARCHIVE}.asc \
+    && sh -c "[ -f /${TIKA_SERVER_ARCHIVE}.asc ]" || wget 
$ARCHIVE_TIKA_SERVER_ASC_URL -O /${TIKA_SERVER_ARCHIVE}.asc || rm 
/${TIKA_SERVER_ARCHIVE}.asc \
+    && sh -c "[ -f /${TIKA_SERVER_ARCHIVE}.asc ]" || exit 1 \
+    && gpg --verify /${TIKA_SERVER_ARCHIVE}.asc /${TIKA_SERVER_ARCHIVE} \
+    && mkdir -p /opt/tika-server \
+    && unzip -q /${TIKA_SERVER_ARCHIVE} -d /opt/tika-server \
+    && rm /${TIKA_SERVER_ARCHIVE} /${TIKA_SERVER_ARCHIVE}.asc
 
 FROM base AS runtime
 # must reference uid_gid
@@ -62,9 +66,15 @@ RUN set -eux \
     && apt-get clean -y && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
 ARG TIKA_VERSION
 ENV TIKA_VERSION=$TIKA_VERSION
-COPY --from=fetch_tika /tika-server-standard-${TIKA_VERSION}.jar 
/tika-server-standard-${TIKA_VERSION}.jar
+COPY --from=fetch_tika /opt/tika-server /opt/tika-server
+# WORKDIR sets the CWD so tika-server's plugin-root fallback resolves
+# `plugins/` relative to /opt/tika-server (its `getCodeSource()` returns a
+# lib/* path, not the top-level jar, so the "next-to-jar" resolution misses).
+WORKDIR /opt/tika-server
 USER $UID_GID
 EXPOSE 9998
-ENTRYPOINT [ "/bin/sh", "-c", "exec java -cp 
\"/tika-server-standard-${TIKA_VERSION}.jar:/tika-extras/*\" 
org.apache.tika.server.core.TikaServerCli -h 0.0.0.0 $0 $@"]
+# Classpath includes the thin server jar, its lib/ deps, and any user-mounted 
/tika-extras/.
+# tika-server auto-discovers pf4j plugins from /opt/tika-server/plugins/.
+ENTRYPOINT [ "/bin/sh", "-c", "exec java -cp 
\"/opt/tika-server/tika-server.jar:/opt/tika-server/lib/*:/tika-extras/*\" 
org.apache.tika.server.core.TikaServerCli -h 0.0.0.0 $0 $@"]
 
 LABEL maintainer="Apache Tika Developers [email protected]"

Reply via email to