docker部署jar,需要matlab runtime环境

项目中使用到了matlab生成的jar,需要采用docker形式部署,涉及到matlab运行环境matlab runtime。
试过windows和linux安装matlab runtime环境后直接运行jar程序都可以正常使用,是项目没有问题的。
现在情况是打成docker镜像启动后项目执行失败,原因是没有matlab的运行环境。
试过docker exec进入镜像中安装matlab runtime,和在构建镜像时进行安装都无法正常安装。
matlab runtime版本2021a。jdk1.8

TechWhizKid参考GPT回答:

  • 在Docker中运行MATLAB Runtime环境,要在Dockerfile中构建这个环境。这是一个可能的Dockerfile,可以用于安装MATLAB Runtime和运行你的jar文件。你可能要根据你的实际情况对以下的Dockerfile进行一些修改。
  • 假设你已经把MATLAB Runtime安装器(版本为2021a)下载到了你的项目目录,文件名为MCR_R2021a_glnxa64_installer.zip,并且你的jar文件叫做my_project.jar

Dockerfile可能如下:

FROM openjdk:8

WORKDIR /app

# 将 MATLAB Runtime 安装程序复制到 Docker 镜像中
COPY MCR_R2021a_glnxa64_installer.zip /app/

# 安装 MATLAB Runtime 需要的额外库
RUN apt-get update && apt-get install -y \
    unzip \
    xorg \
    libxt6 \
    libxmu6 \
    libXp6 \
    libXpm4 \
    libXmu6 \
    libXt6 \
    libXext6 \
    libXp6 \
    libXpm4 \
    && rm -rf /var/lib/apt/lists/*

# 解压缩安装程序
RUN unzip MCR_R2021a_glnxa64_installer.zip

# 运行安装程序
RUN ./install -mode silent -agreeToLicense yes

# 删除安装程序以节省 Docker 镜像的空间
RUN rm -rf MCR_R2021a_glnxa64_installer.zip install

# 设置 MATLAB Runtime 路径
ENV LD_LIBRARY_PATH=/usr/local/MATLAB/MATLAB_Runtime/v910/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v910/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v910/sys/os/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v910/extern/bin/glnxa64

# 将您的 jar 文件复制到 Docker 镜像中
COPY my_project.jar /app/

CMD ["java", "-jar", "my_project.jar"]
  • 这个Dockerfile首先基于OpenJDK 8创建一个新的Docker镜像。然后它将MATLAB Runtime安装器复制到Docker镜像并安装它。它还安装了一些MATLAB Runtime要的额外库。然后它设置了MATLAB Runtime的路径,最后运行你的jar文件。
  • 因为MATLAB Runtime和其所需的库占用了一定的空间,所以最后构建出来的Docker镜像可能会比较大。你可能要在你的Docker配置中分配更多的磁盘空间。

该回答引用自GPT:
在Docker中进行MATLAB和MATLAB Runtime的安装比较复杂,建议使用官方提供的Docker镜像。

具体步骤如下:

  1. 下载MATLAB Runtime官方提供的Docker镜像,命令如下:

    docker pull mathworks/matlab:r2021a
    
  2. 在Dockerfile中添加如下指令:

    FROM mathworks/matlab:r2021a
    
    # 程序文件复制到镜像中
    ADD target/demo.jar /app/demo.jar
    
    # 设置环境变量,MATLAB Runtime的安装路径
    # 注意:路径需要根据实际情况修改
    ENV LD_LIBRARY_PATH /usr/local/MATLAB/MATLAB_Runtime/v910/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v910/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v910/sys/os/glnxa64
    
    # 启动命令
    CMD ["java", "-jar", "/app/demo.jar"]
    
  3. 在Dockerfile所在的目录下,使用如下命令构建Docker镜像:

    docker build -t demo .
    

    其中,demo是镜像名称,可以根据实际情况修改。

  4. 使用如下命令启动Docker容器:

    docker run --name demo -it demo
    

    其中,demo是容器名称,可以根据实际情况修改。

如果还是无法成功安装MATLAB Runtime,可以尝试升级到更高版本。另外,建议检查一下Dockerfile中的路径是否正确。

在 Docker 中部署包含 MATLAB 生成的 JAR 的应用程序需要考虑 MATLAB Runtime 的使用,可以通过以下步骤尝试解决问题:

  1. 根据您的操作系统使用 Docker 进行搭建。下载并安装 Docker。确保安装了正确的 Docker 版本。

  2. 从 MathWorks 网站下载 MATLAB Runtime。确保下载与您的运行环境相匹配的 MATLAB Runtime。

  3. 创建一个 Dockerfile,该文件定义了如何构建 Docker 映像。例如,如果要使用 Ubuntu 20.04 作为基础映像,安装 OpenJDK 8 和 MATLAB Runtime,则可以使用以下 Dockerfile:

FROM ubuntu:20.04

RUN apt-get update && \
    apt-get install -y openjdk-8-jre-headless && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

ADD MCR_R2021a_glnxa64_installer.zip /tmp
RUN unzip /tmp/MCR_R2021a_glnxa64_installer.zip -d /tmp/mcr_installer && \
    /tmp/mcr_installer/install -mode silent -agreeToLicense yes && \
    rm -rf /tmp/mcr_installer /tmp/MCR_R2021a_glnxa64_installer.zip
  1. 构建 Docker 映像。确保 Dockerfile 和 MATLAB Runtime 安装文件位于 Docker 构建上下文中。使用以下命令构建容器映像:

    docker build --tag myContainer .
    
  2. 运行容器镜像。运行以下命令启动容器:

    docker run -it myContainer
    
  3. 在容器中运行 MATLAB 生成的 JAR。在容器中执行以下命令:

    java -jar MyApplication.jar
    

以上是一些步骤,建议您参照 MATLAB 官方文档进行操作。

可以借鉴下

1. 安装matlab runtime

首先,需要安装matlab runtime,可以从官网下载,下载完成后,将其解压到指定的文件夹,比如/opt/mcr/v94,其中v94表示matlab runtime的版本号。

2. 构建docker镜像

接下来,需要构建docker镜像,可以使用Dockerfile来构建,Dockerfile的内容如下:


FROM ubuntu:16.04
# 安装matlab runtime
COPY /opt/mcr/v94 /opt/mcr/v94
# 安装java
RUN apt-get update && apt-get install -y openjdk-8-jdk
# 将jar包拷贝到docker容器中
COPY /opt/app.jar /opt/app.jar
# 设置环境变量
ENV LD_LIBRARY_PATH /opt/mcr/v94/runtime/glnxa64:/opt/mcr/v94/bin/glnxa64:/opt/mcr/v94/sys/os/glnxa64
# 运行jar包
CMD java -jar /opt/app.jar
构建完成后,可以使用docker run命令来运行docker容器,运行jar包。

要在 Docker 容器中运行 MATLAB Runtime,您需要确保容器中包含适当的 MATLAB Runtime 安装。您可以通过在 Dockerfile 中使用以下命令来安装 MATLAB Runtime:

dockerfile
Copy
# 安装 MATLAB Runtime
ADD MCR_R2021a_glnxa64_installer.zip /tmp
RUN unzip /tmp/MCR_R2021a_glnxa64_installer.zip -d /tmp/mcr && \
    /tmp/mcr/install -destinationFolder /usr/local/MATLAB/MATLAB_Runtime/v910
其中,MCR_R2021a_glnxa64_installer.zip 是 MATLAB Runtime 的安装文件,您需要将其放置在 Dockerfile 和容器中的任何位置。在上面的示例中,我将其放置在 /tmp 目录下。安装完成后,您应该将 MATLAB Runtime 添加到容器的 PATH 环境变量中:

dockerfile
Copy
# 添加 MATLAB Runtime 到 PATH 环境变量
ENV LD_LIBRARY_PATH=/usr/local/MATLAB/MATLAB_Runtime/v910/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v910/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v910/sys/os/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v910/extern/bin/glnxa64:$LD_LIBRARY_PATH
ENV XAPPLRESDIR=/usr/local/MATLAB/MATLAB_Runtime/v910/X11/app-defaults:${XAPPLRESDIR}
在 Dockerfile 中,您需要将您的 MATLAB Runtime 相关文件添加到容器中,并使用 COPY 或 ADD 命令将其复制到容器中。例如:

dockerfile
Copy
# 添加 MATLAB Runtime 相关文件
COPY MyJar.jar /usr/local/bin/
如果您的项目中使用了 MATLAB Runtime 的 Java 接口,您需要在 Dockerfile 中添加相应的 Java 依赖项。例如:

dockerfile
Copy
# 添加 Java 依赖项
RUN apt-get update && apt-get install -y openjdk-8-jdk
最后,在 Dockerfile 中添加启动命令来运行您的 jar 文件。例如:

dockerfile
Copy
# 启动 jar 文件
CMD ["java", "-jar", "/usr/local/bin/MyJar.jar"]
这里的 /usr/local/bin/MyJar.jar 应该替换为您实际的 jar 文件路径。现在,您可以使用 Dockerfile 构建 Docker 镜像,并在容器中运行您的项目。例如:

bash
Copy
docker build -t您的镜像名称:标签

docker run -it --rm -v /path/to/host/folder:/path/to/container/folder -p 8080:8080 您的镜像名称:标签
其中,-v 参数指定将主机文件夹挂载到容器文件夹中,-p 参数指定将容器的 8080 端口映射到主机的 8080 端口上。这样,您就可以通过访问主机的 http://localhost:8080 来访问您的项目了。

请注意,从 MATLAB R2021a 开始,MATLAB Runtime 需要使用 GLIBC 版本 2.28 或更高版本。如果您使用的是旧版本的 Linux 操作系统,则可能需要升级 GLIBC。如果您遇到了 GLIBC 版本不兼容的问题,请在 Dockerfile 中添加以下命令:

dockerfile
Copy
# 升级 GLIBC 版本
RUN apt-get update && apt-get install -y --no-install-recommends wget ca-certificates && \
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.33-r0/glibc-2.33-r0.apk && \
    apk add glibc-2.33-r0.apk && \
    rm -rf glibc-2.33-r0.apk /var/cache/apk/*
这将从 GitHub 下载适用于容器的 GLIBC 版本,并将其安装到容器中。请注意,这可能会增加 Docker 镜像的大小。

注意检查设置环境变量,可以通过下面命令进行设置


export LD_LIBRARY_PATH=/usr/local/MATLAB/MATLAB_Runtime/v94/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/sys/os/glnxa64
export XAPPLRESDIR=/usr/local/MATLAB/MATLAB_Runtime/v94/X11/app-defaults


  1. 在Dockerfile中安装Java运行时环境。
    FROM openjdk:8-jdk-alpine
  2. 下载并安装Matlab Runtime环境。
    RUN apk update && apk add wget unzip
    RUN wget http://www.mathworks.com/supportfiles/downloads/R2017a/deployment_files/R2017a/installers/glnxa64/MCR_R2017a_glnxa64_installer.zip
    RUN unzip MCR_R2017a_glnxa64_installer.zip
    RUN ./install -mode silent -agreeToLicense yes
  3. 将您的Java应用程序和Matlab Runtime环境一起打包到Docker镜像中。

COPY target/*.jar /app.jar
COPY MCR_R2017a_glnxa64_installer.zip /MCR_R2017a_glnxa64_installer.zip
COPY install /install
这样,您就可以在Docker容器中部署中使用Matlab Runtime环境。

检查一下Matlab Runtime 版本和架构是否与容器操作系统版本和架构兼容。如果安装包与容器操作系统不兼容,可能会导致安装失败或出现未知的问题。同时在安装前检查容器内是否已安装了一些必要的依赖项,如果缺少了依赖项,也会导致安装失败