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

Docker化含知识库的Java Web应用时遇文件找不到异常

问题:Docker部署Java Web应用时无法找到知识库文件

我在将包含知识库的Java Web应用Docker化时遇到问题。知识库存储在项目根目录的knowledge-repo文件夹中,应用本地运行正常,但Docker部署后抛出java.io.FileNotFoundException,提示找不到knowledge-repo/config/regex_template.yaml文件。

相关配置

application.yaml 片段

knowledge-repo:
  path: knowledge-repo    

Dockerfile 片段

FROM tomcat:jdk21
COPY "knowledge-repo" /usr/local/tomcat/webapps/spec/knowledge-repo
WORKDIR /usr/local/tomcat/webapps/temp
COPY ./warfile/*.war .
RUN jar -xf *.war
RUN mv /usr/local/tomcat/webapps/temp/ /usr/local/tomcat/webapps/spec
RUN rm -rf /usr/local/tomcat/webapps/temp
COPY ./dist /usr/local/tomcat/webapps/ROOT/    

已尝试的操作

我曾将knowledge-repo复制到三个不同路径,但均未解决问题:

COPY "knowledge-repo" /usr/local/tomcat/webapps/spec/knowledge-repo
COPY "knowledge-repo" /usr/local/tomcat/webapps/knowledge-repo
COPY "knowledge-repo" /knowledge-repo

解决方案

核心原因

Java中使用相对路径knowledge-repo时,实际是基于**进程运行的工作目录(CWD)**来定位文件的。Tomcat容器默认工作目录为/usr/local/tomcat,和你存放知识库的路径不匹配,导致找不到文件。

具体解决办法

  1. 改用绝对路径配置
    根据你最终复制的知识库路径,把application.yaml里的路径改成绝对路径。例如如果知识库在/usr/local/tomcat/webapps/spec/knowledge-repo,配置修改为:

    knowledge-repo:
      path: /usr/local/tomcat/webapps/spec/knowledge-repo
    
  2. 调整Tomcat工作目录
    在Dockerfile末尾添加命令,将Tomcat的工作目录切换到知识库所在的父目录,这样相对路径就能正确指向文件:

    WORKDIR /usr/local/tomcat/webapps/spec
    
  3. 先验证文件是否存在
    进入容器确认文件实际路径是否正确:

    docker exec -it <你的容器ID> /bin/bash
    # 检查目标文件
    ls /usr/local/tomcat/webapps/spec/knowledge-repo/config/regex_template.yaml
    

    确认文件存在后再调整配置或工作目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:12:51