You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Tika Server v2未暴露/async与/pipes端点问题求助

问题描述

希望通过Tika Server接入S3源/目标URL,实现异步解析多种文件类型。已通过Docker在本地启动2.9.2版本的Tika Server,但访问/async或/pipes端点均返回404,主页也未显示对应路由。怀疑是端点未显式暴露、依赖JAR未加载或配置文件存在问题,以下是相关配置及命令,寻求排查建议:

tika-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<properties>
  <parsers>
    <parser class="org.apache.tika.parser.DefaultParser">
    </parser>
  </parsers>
  <server>
    <params>
      <enableUnsecureFeatures>true</enableUnsecureFeatures>
    </params>
  </server>
  <pipes>
    <params>
      <tikaConfig>./config/tika-config.xml</tikaConfig>
    </params>
  </pipes>
  <async>
    <params>
      <timeoutMillis>1000000</timeoutMillis>
    </params>
  </async>
  <fetchers>
    <fetcher class="org.apache.tika.pipes.fetcher.s3.S3Fetcher">
      <params>
        <name>s3f</name>
        <region>us-east-1</region>
        <bucket>tika-bucket</bucket>
        <credentialsProvider>instance</credentialsProvider>
        <spoolToTemp>false</spoolToTemp>
        <extractUserMetadata>false</extractUserMetadata>
        <maxConnections>100</maxConnections>
      </params>
    </fetcher>
  </fetchers>
  <emitters>
    <emitter class="org.apache.tika.pipes.emitter.s3.S3Emitter">
      <params>
        <param name="name" type="string">s3e</param>
        <param name="region" type="string">us-east-1</param>
        <param name="credentialsProvider" type="string">instance</param>
        <param name="bucket" type="string">tika-bucket</param>
        <param name="fileExtension" type="string">json</param>
        <param name="spoolToTemp" type="bool">true</param>
      </params>
    </emitter>
  </emitters>
</properties>

Dockerfile

FROM ubuntu:focal as base
RUN apt-get update

ENV TIKA_VERSION 2.9.2
ENV TIKA_SERVER_JAR tika-server-standard

FROM base as dependencies

RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get -y install gdal-bin tesseract-ocr \
        tesseract-ocr-eng curl gnupg

# Set this environment variable if you need to run OCR
ENV OMP_THREAD_LIMIT=1

RUN apt-get -y install openjdk-17-jdk

FROM dependencies as fetch_tika

# download all the tika dependencies (removed those lines of code for this question)

ENV TIKA_VERSION=$TIKA_VERSION
RUN mkdir /tika-bin
COPY --from=fetch_tika /${TIKA_SERVER_JAR}-${TIKA_VERSION}.jar /tika-bin/${TIKA_SERVER_JAR}-${TIKA_VERSION}.jar
# The extra dependencies need to be added into tika-bin together with the tika-server jar
COPY --from=fetch_tika /tika-fetcher-s3-${TIKA_VERSION}.jar /tika-bin/tika-fetcher-s3-${TIKA_VERSION}.jar
COPY --from=fetch_tika /tika-emitter-s3-${TIKA_VERSION}.jar /tika-bin/tika-emitter-s3-${TIKA_VERSION}.jar
RUN mkdir /config
COPY tika-config.xml /config

EXPOSE 9998
ENTRYPOINT [ "/bin/sh", "-c", "exec java -cp \"/tika-bin/*\" org.apache.tika.server.core.TikaServerCli -h 0.0.0.0 $0 $@"]

构建运行命令

docker build --tag 'tika_server_local' .

docker run -d \
    --name tika_container \
    -v tika_dir:/config \
    -p 9998:9998 tika_server_local:latest \
    -c ./config/tika-config.xml

排查建议

1. 补全核心依赖JAR包

Tika的异步(Async)和管道(Pipes)功能需要额外的核心模块支撑,仅现有JAR包不足以激活对应端点,需确保以下JAR包存在于/tika-bin目录:

  • tika-pipes-core-${TIKA_VERSION}.jar
  • tika-server-async-${TIKA_VERSION}.jar
  • tika-server-pipes-${TIKA_VERSION}.jar
  • 配套的基础依赖(如tika-core、tika-parser-api等,建议通过官方Maven仓库下载完整依赖链)

2. 修正Dockerfile的依赖复制逻辑

当前fetch_tika阶段的COPY --from=fetch_tika属于自引用,无法正确获取下载的JAR包。需调整镜像构建阶段的复制逻辑,示例如下:

FROM dependencies as fetch_tika
# 补充下载命令,获取所有必需JAR
RUN curl -LO https://repo1.maven.org/maven2/org/apache/tika/tika-server-standard/${TIKA_VERSION}/tika-server-standard-${TIKA_VERSION}.jar
RUN curl -LO https://repo1.maven.org/maven2/org/apache/tika/tika-pipes-core/${TIKA_VERSION}/tika-pipes-core-${TIKA_VERSION}.jar
RUN curl -LO https://repo1.maven.org/maven2/org/apache/tika/tika-server-async/${TIKA_VERSION}/tika-server-async-${TIKA_VERSION}.jar
RUN curl -LO https://repo1.maven.org/maven2/org/apache/tika/tika-server-pipes/${TIKA_VERSION}/tika-server-pipes-${TIKA_VERSION}.jar
RUN curl -LO https://repo1.maven.org/maven2/org/apache/tika/tika-fetcher-s3/${TIKA_VERSION}/tika-fetcher-s3-${TIKA_VERSION}.jar
RUN curl -LO https://repo1.maven.org/maven2/org/apache/tika/tika-emitter-s3/${TIKA_VERSION}/tika-emitter-s3-${TIKA_VERSION}.jar

# 构建最终镜像
FROM dependencies as final
RUN mkdir /tika-bin
COPY --from=fetch_tika /tika-server-standard-${TIKA_VERSION}.jar /tika-bin/
COPY --from=fetch_tika /tika-pipes-core-${TIKA_VERSION}.jar /tika-bin/
COPY --from=fetch_tika /tika-server-async-${TIKA_VERSION}.jar /tika-bin/
COPY --from=fetch_tika /tika-server-pipes-${TIKA_VERSION}.jar /tika-bin/
COPY --from=fetch_tika /tika-fetcher-s3-${TIKA_VERSION}.jar /tika-bin/
COPY --from=fetch_tika /tika-emitter-s3-${TIKA_VERSION}.jar /tika-bin/
RUN mkdir /config
COPY tika-config.xml /config

EXPOSE 9998
ENTRYPOINT [ "/bin/sh", "-c", "exec java -cp \"/tika-bin/*\" org.apache.tika.server.core.TikaServerCli -h 0.0.0.0 $0 $@"]

3. 优化配置文件

  • 移除<pipes>节点中的tikaConfig参数,当前配置文件已被Tika加载,无需重复指定路径
  • 确认容器内./config/tika-config.xml路径可访问:若使用卷挂载,需确保本地tika_dir目录下存在该文件;也可直接将配置文件复制到镜像内,避免挂载路径问题

修正后的<pipes>节点示例:

<pipes>
  <params>
    <!-- 移除重复的tikaConfig配置 -->
  </params>
</pipes>

4. 查看启动日志排查错误

暂时取消docker run的-d后台模式,前台启动容器查看日志:

docker run --name tika_container -v tika_dir:/config -p 9998:9998 tika_server_local:latest -c ./config/tika-config.xml

重点关注是否存在ClassNotFoundException(依赖缺失)、配置文件语法错误等提示。

5. 验证端点注册状态

若依赖加载正常,启动日志会显示类似Registered resource: /async或Registered resource: /pipes的信息。如果没有此类日志,说明对应模块未成功加载,需重新检查依赖包完整性。


内容的提问来源于stack exchange,提问作者canpan14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:27:11