项目中使用到了matlab生成的jar,需要采用docker形式部署,涉及到matlab运行环境matlab runtime。
试过windows和linux安装matlab runtime环境后直接运行jar程序都可以正常使用,是项目没有问题的。
现在情况是打成docker镜像启动后项目执行失败,原因是没有matlab的运行环境。
试过docker exec进入镜像中安装matlab runtime,和在构建镜像时进行安装都无法正常安装。
matlab runtime版本2021a。jdk1.8
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"]
该回答引用自GPT:
在Docker中进行MATLAB和MATLAB Runtime的安装比较复杂,建议使用官方提供的Docker镜像。
具体步骤如下:
下载MATLAB Runtime官方提供的Docker镜像,命令如下:
docker pull mathworks/matlab:r2021a
在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"]
在Dockerfile所在的目录下,使用如下命令构建Docker镜像:
docker build -t demo .
其中,demo
是镜像名称,可以根据实际情况修改。
使用如下命令启动Docker容器:
docker run --name demo -it demo
其中,demo
是容器名称,可以根据实际情况修改。
如果还是无法成功安装MATLAB Runtime,可以尝试升级到更高版本。另外,建议检查一下Dockerfile中的路径是否正确。
在 Docker 中部署包含 MATLAB 生成的 JAR 的应用程序需要考虑 MATLAB Runtime 的使用,可以通过以下步骤尝试解决问题:
根据您的操作系统使用 Docker 进行搭建。下载并安装 Docker。确保安装了正确的 Docker 版本。
从 MathWorks 网站下载 MATLAB Runtime。确保下载与您的运行环境相匹配的 MATLAB Runtime。
创建一个 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
构建 Docker 映像。确保 Dockerfile 和 MATLAB Runtime 安装文件位于 Docker 构建上下文中。使用以下命令构建容器映像:
docker build --tag myContainer .
运行容器镜像。运行以下命令启动容器:
docker run -it myContainer
在容器中运行 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
COPY target/*.jar /app.jar
COPY MCR_R2017a_glnxa64_installer.zip /MCR_R2017a_glnxa64_installer.zip
COPY install /install
这样,您就可以在Docker容器中部署中使用Matlab Runtime环境。
检查一下Matlab Runtime 版本和架构是否与容器操作系统版本和架构兼容。如果安装包与容器操作系统不兼容,可能会导致安装失败或出现未知的问题。同时在安装前检查容器内是否已安装了一些必要的依赖项,如果缺少了依赖项,也会导致安装失败