Python脚本无法访问Docker映像中的.jar文件

我正在尝试将我创建的一些flask应用程序码头化。

我需要在创建的Python脚本中使用startJVM()访问Java文件。 下面的代码在我的本地终端上运行良好,并且可以检测到扩展名为“ .jar”的文件的路径。

ZEMBEREK_PATH = os.path.abspath("zemberek-full.jar")

startJVM(getDefaultJVMPath(), '-ea', f'-Djava.class.path={ZEMBEREK_PATH}', convertStrings=False)

但是,当我在docker映像中运行此文件时,我猜想path变量找不到扩展名为“ .jar”的文件,因此程序给出了错误。

Traceback (most recent call last):
  File "app.py", line 28, in <module>
    startJVM(getDefaultJVMPath(), '-ea', f'-Djava.class.path={ZEMBEREK_PATH}', convertStrings=False)
  File "/usr/local/lib/python3.7/site-packages/jpype/_core.py", line 337, in getDefaultJVMPath
    return finder.get_jvm_path()
  File "/usr/local/lib/python3.7/site-packages/jpype/_jvmfinder.py", line 160, in get_jvm_path
    jvm = method()
  File "/usr/local/lib/python3.7/site-packages/jpype/_jvmfinder.py", line 215, in _get_from_known_locations
    for home in self.find_possible_homes(self._locations):
  File "/usr/local/lib/python3.7/site-packages/jpype/_jvmfinder.py", line 120, in find_possible_homes
    for childname in sorted(os.listdir(parent)):
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/jvm'

我检查了Docker映像中的文件。图像中无缝包含“ zemberek-full.jar”。

您是否可以针对我遇到的这个问题提供解决方案?

在此先感谢大家花时间解决这个问题。 :)

这是我的Dockerfile

FROM python:3.7


ARG DEBIAN_FRONTED=noninteractive


RUN apt-get update && apt-get install -y --no-install-recommends apt-utils > /dev/null

RUN apt-get install -y build-essential tcl

RUN apt-get install -y systemd-sysv

RUN apt-get update  > /dev/null

RUN apt-get install  -y wget > /dev/null

RUN apt-get install  -y zip > /dev/null

RUN apt-get install  -y libaio1 > /dev/null

RUN apt-get update > /dev/null

RUN apt-get install  -y alien > /dev/null

WORKDIR /

RUN mkdir /app

WORKDIR /app

COPY . .

RUN pip install -r requirements.txt

CMD ["python", "app.py"] 
评论
  • 猪猪zZZ
    猪猪zZZ 回复

    您没有在Docker实例中安装JVM。将此行添加到您的Dockerfile中进行安装:

    RUN apt-get install -y openjdk-11-jdk;