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]"