新闻详情

新闻详情

首页 / 资讯中心 / 详情

【Docker 实战】麒麟 V10 离线运行 MATLAB R2012a

发布时间:2026/9/30 9:32:57来源:尧图网络
【Docker 实战】麒麟 V10 离线运行 MATLAB R2012a
摘要MATLAB R2012a 是 2012 年发布的 32 位glnx86版本很多老项目、老算法至今还在用。直接装在银河麒麟 Kylin V10 (Lance) 上非常折腾——系统 glibc 已经 2.28R2012a 需要的老库、32 位库基本都缺装完大概率启动报错。用 Docker 把老环境整体打包是成本最低的解法镜像自带老 glibc 和 32 位库宿主机只负责跑容器。本文记录从零到产出 matlab2012.tar 的完整过程附可直接使用的 Dockerfile 和踩坑清单。一、为什么要用 Docker 装 MATLAB 2012宿主系统太新麒麟 V10 SP3 的 glibc 是 2.28而 R2012a 是 2012 年的 32 位程序依赖一批老版本的 32 位 X11/GL 库。装原生包极易破坏系统强行给系统装 i686 库、替换老版本 libXp/libXt风险高且难回滚。容器自带用户态容器里的 glibc、X11 库跟宿主机完全隔离宿主机 glibc 再新也不影响。一次构建、多机分发构建完 docker save 成 tar内网机器 docker load 就能用不用联网、不用再装依赖。一句话结论容器共享内核但不共享用户态库。只要宿主机内核能跑容器麒麟 V10 SP3 是 4.19 内核没问题容器里放一套 CentOS 7 32 位库MATLAB R2012a 就能稳稳跑起来。二、环境说明项目版本 / 说明宿主机目标银河麒麟 Kylin V10 SP3 (Lance)x86_64宿主内核4.19能正常跑 Docker 即可构建机任意能联网的 x86_64 机器Windows Docker Desktop 也可以基础镜像centos:7自带老 glibc且有完整的 i686 多架构库MATLAB 版本R2012aglnx86即 Linux 32 位最终产物matlab2012.tardocker save 导出的镜像 tar三、准备工作需要自己提供下面三样必须由你本人从官方渠道获取任何来源不明的副本都不要用MATLAB_R2012a_glnx86.iso —— 登录自己的 MathWorks 账号 → Downloads → Get ISOs and DMGs选择 R2012a / Linux (glnx86)。license.lic —— 独立许可standalone用 MathWorks 下发的 license.lic网络许可network用许可服务器 porthost 生成的 .lic。File Installation Key —— 形如 12345-67890-12345-67890-…静默安装时通过参数传入不要写死在文件里。把 ISO 和 license.lic 放到构建目录与 Dockerfile 同级目录结构如下matlab2012/├── Dockerfile├── MATLAB_R2012a_glnx86.iso # 约 3.5 GB├── license.lic├── build.sh / build.ps1 # 一键构建脚本可选└── PLACE_FILES_HERE.txt四、基础镜像CentOS 7 有两个必踩的坑坑 1CentOS 7 已 EOLyum 源全部失效直接 yum install 会报 Could not resolve host: mirrorlist.centos.org 或者 404。原因CentOS 7 已于 2024 年 6 月停止维护官方 mirrorlist 被下线包被归档到 vault。解决办法是把源切到归档地址注意vault 的路径里没有 /centos/ 前缀且必须把 $releasever 固定成 7.9.2009。sed -i -e s|^mirrorlist|#mirrorlist|g \-e s|^#baseurlhttp://mirror.centos.org/centos/$releasever|baseurlhttp://mirrors.aliyun.com/centos-vault/7.9.2009|g \/etc/yum.repos.d/CentOS-*.repo可替换的归档源哪个通用哪个http://mirrors.aliyun.com/centos-vault/7.9.2009http://vault.centos.org/7.9.2009http://mirrors.nju.edu.cn/centos-vault/7.9.2009坑 2国内直连 Docker Hub 经常超时docker pull centos:7 可能一直卡在 Get https://registry-1.docker.io/v2/: context deadline exceeded。改用镜像站显式拉取再打个短标签docker pull docker.m.daocloud.io/library/centos:7docker tag docker.m.daocloud.io/library/centos:7 centos:7五、32 位运行库装不齐就启动不了R2012a 是 32 位程序缺库的典型报错是error while loading shared libraries: libXp.so.6: cannot open shared object file: No such file or directory所以除了 x86_64 的库必须把对应的 i68632 位版本一起装上。完整依赖清单libXext libXt libXtst libXmu libXp libXpm libxslt \glibc.i686 libXext.i686 libXt.i686 libXtst.i686 \libXmu.i686 libXp.i686 libXpm.i686 mesa-libGL.i686 \gstreamer-plugins-base \libXrender libXrender.i686 libXi libXi.i686 \libSM libSM.i686 libICE libICE.i686 \libgcc.i686 libstdc.i686 zlib.i686 ncurses-libs.i686实测结论CentOS 7 归档源 os/x86_64 仓库里本身包含 2268 个 i686 包上面这些库的 i686 版本全部存在所以不需要额外配置 i386 仓库直接 yum install 即可。六、完整 DockerfileFROM docker.m.daocloud.io/library/centos:7ARG MATLAB_KEYARG MATLAB_DEST/usr/local/MATLAB/R2012a# 1. CentOS 7 已 EOL切到归档源RUN set -eux; \sed -i -e s|^mirrorlist|#mirrorlist|g \-e s|^#baseurlhttp://mirror.centos.org/centos/\$releasever|baseurlhttp://mirrors.aliyun.com/centos-vault/7.9.2009|g \/etc/yum.repos.d/CentOS-*.repo; \yum -y makecache fast# 2. 32 位运行库依赖RUN set -eux; \yum install -y \libXext libXt libXtst libXmu libXp libXpm libxslt \glibc.i686 libXext.i686 libXt.i686 libXtst.i686 \libXmu.i686 libXp.i686 libXpm.i686 mesa-libGL.i686 \gstreamer-plugins-base \libXrender libXrender.i686 libXi libXi.i686 \libSM libSM.i686 libICE libICE.i686 \libgcc.i686 libstdc.i686 zlib.i686 ncurses-libs.i686 \bsdtar which; \yum clean all; rm -rf /var/cache/yum# 3. 放入安装介质与许可证COPY MATLAB_R2012a_glnx86.iso /tmp/matlab.isoCOPY license.lic /tmp/license.lic# 4. 静默安装build 阶段不能 mount用 bsdtar 解包 ISO9660RUN set -eux; \test -n ${MATLAB_KEY}; \mkdir -p /mnt/matlab; \bsdtar -xf /tmp/matlab.iso -C /mnt/matlab; \cd /mnt/matlab; \./install -mode silent \-agreeToLicense yes \-destinationFolder ${MATLAB_DEST} \-fileInstallationKey ${MATLAB_KEY} \-licensePath /tmp/license.lic; \mkdir -p ${MATLAB_DEST}/licenses; \cp /tmp/license.lic ${MATLAB_DEST}/licenses/license.lic; \rm -rf /tmp/matlab.iso /tmp/license.lic /mnt/matlabENV MATLAB_ROOT/usr/local/MATLAB/R2012aENV PATH/usr/local/MATLAB/R2012a/bin:$PATHWORKDIR /workCMD [matlab,-nodisplay,-nosplash]几个关键点不能写 mount -o loopdocker build 阶段没有 CAP_SYS_ADMIN、也没有 loop 设备挂载必定失败改用 bsdtar 解包 ISO9660效果等同挂载。license 必须落位安装完把 license.lic 复制到 $MATLAB_DEST/licenses/否则运行时会提示找不到许可证。密钥用 ARG 传注意 --build-arg 的值会留在镜像历史docker history 可见对密钥敏感的场景请改用 BuildKit 的 --secret。CMD 用 -nodisplay容器里没有图形界面无头运行必须加 -nodisplay。七、构建、自检与导出 tar# 1) 构建构建上下文含 3.5GB 的 ISO第一次会比较慢docker build --build-arg MATLAB_KEY12345-67890-12345-67890 -t matlab2012:r2012a .# 2) 自检能打印出版本号就说明装好了docker run --rm matlab2012:r2012a matlab -nodisplay -nosplash -r disp(version); exit# 3) 导出离线 tardocker save -o matlab2012.tar matlab2012:r2012a备选方案用 privileged 容器 mountISO 不想放进构建上下文时如果 ISO 太大、不想每次构建都上传进构建上下文可以用特权容器挂载安装、再 commit 成镜像docker run -d --name matlab-build --privileged -v $PWD:/files:ro centos:7 sleep infinitydocker exec -i -e MATLAB_KEY12345-67890-12345-67890 matlab-build bash -s EOSset -euo pipefailMATLAB_DEST/usr/local/MATLAB/R2012ased -i -e s|^mirrorlist|#mirrorlist|g \-e s|^#baseurlhttp://mirror.centos.org/centos/$releasever|baseurlhttp://mirrors.aliyun.com/centos-vault/7.9.2009|g \/etc/yum.repos.d/CentOS-*.repoyum -y makecache fastyum install -y libXext libXt libXtst libXmu libXp libXpm libxslt \glibc.i686 libXext.i686 libXt.i686 libXtst.i686 \libXmu.i686 libXp.i686 libXpm.i686 mesa-libGL.i686 \gstreamer-plugins-base libXrender libXrender.i686 libXi libXi.i686 \libSM libSM.i686 libICE libICE.i686 \libgcc.i686 libstdc.i686 zlib.i686 ncurses-libs.i686mkdir -p /mnt/matlabmount -o loop /files/MATLAB_R2012a_glnx86.iso /mnt/matlabcd /mnt/matlab./install -mode silent -agreeToLicense yes \-destinationFolder $MATLAB_DEST \-fileInstallationKey $MATLAB_KEY \-licensePath /files/license.liccd / umount /mnt/matlabmkdir -p $MATLAB_DEST/licensescp /files/license.lic $MATLAB_DEST/licenses/license.licEOSdocker commit -c ENV PATH/usr/local/MATLAB/R2012a/bin:$PATH matlab-build matlab2012:r2012adocker rm -f matlab-builddocker save -o matlab2012.tar matlab2012:r2012a八、在麒麟 V10 上部署运行# 1) 导入镜像内网机器无需联网docker load -i matlab2012.tar# 2) 交互式跑一段代码docker run --rm matlab2012:r2012a \matlab -nodisplay -nosplash -r a[1 2 3]; disp(sum(a)); exit# 3) 跑宿主机上的脚本把脚本目录挂进容器docker run --rm -v /data/scripts:/work matlab2012:r2012a \matlab -nodisplay -nosplash -r run(/work/test.m); exit小提示如果脚本要写结果文件记得挂载一个可写目录并且注意容器内是 root、生成文件的属主会和宿主机不一致必要时用 --user $(id -u):$(id -g) 指定运行用户。九、验证清单检查项命令 / 期望结果版本可用matlab -nodisplay -r disp(version) → 输出 7.14.0.739 (R2012a)许可证可用matlab -nodisplay -r license(test,MATLAB) → 返回 132 位库齐全ldd /usr/local/MATLAB/R2012a/bin/glnx86/MATLAB | grep not found → 无输出镜像可迁移docker save 后在目标机 docker load再跑一次版本检查十、踩坑汇总现象原因解决yum 报 mirrorlist.centos.org 无法解析 / 404CentOS 7 已 EOL官方源下线切换到 centos-vault 归档源docker build 卡在 mount: permission deniedbuild 阶段无 CAP_SYS_ADMIN、无 loop 设备用 bsdtar 解包 ISO或改用 privileged 容器 commit启动报 libXp.so.6 / libXm.so.4 not found只装了 x86_64 库R2012a 是 32 位补装同名 .i686 包安装器一闪而过或报 Java 相关错误缺 32 位基础库glibc.i686 / libstdc.i686 / zlib.i686按本文依赖清单补全运行提示找不到许可证license.lic 未放到 $MATLAB_DEST/licenses/复制到该目录或安装时用 -licensePath 指定docker pull centos:7 超时直连 Docker Hub 不稳定用镜像站显式拉取并重新打标签导出 tar 很大、拷贝慢镜像含完整 MATLAB 32 位库可 docker save 时用 gzip 压缩docker save matlab2012:r2012a | gzip matlab2012.tar.gz十一、总结核心思路用 CentOS 7 基础镜像自带老 glibc i686 多架构库把 MATLAB R2012a 的 32 位老环境完整封进镜像。两个必踩的坑CentOS 7 EOL 导致 yum 源失效docker build 阶段不能 mount -o loop。一次构建docker save 成 tar内网麒麟 V10 机器 docker load 即可离线运行不再依赖外网和系统级依赖安装。版权提示MATLAB 安装介质与许可证属于 MathWorks 商业授权软件请务必从官方渠道获取不要使用来源不明的副本。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

AnythingLLM+Ollama搭建私有知识库:文档秒变可问答的RAG实战 2026/9/30 10:25:06

AnythingLLM+Ollama搭建私有知识库:文档秒变可问答的RAG实战

简介:面向希望搭建私有知识库的AI应用开发与运维人员的PDF教程,内容聚焦AnythingLLM与Ollama的集成实战。教程从AnythingLLM安装配置入手,讲解如何接入本地Ollama部署的qwen2.5:14b模型,并结合DeepSeek等主流大模型,详…

阅读更多 →
Linux HugePages配置实战:从TLB原理到数据库性能优化 2026/9/30 10:25:06

Linux HugePages配置实战:从TLB原理到数据库性能优化

简介:本资源为Linux环境下快速配置HugePages的完整步骤指南,面向需要优化大内存应用性能的数据库管理员、系统运维人员及Linux中高级用户,尤其针对Oracle数据库在RHEL等系统上使用大页内存的场景。内容涵盖memlock无限制设置、vm.nr_hugepage…

阅读更多 →
AI Agent 沙箱实战:基于 namespace、seccomp 与 cgroups 的权限隔离 2026/9/30 10:25:06

AI Agent 沙箱实战:基于 namespace、seccomp 与 cgroups 的权限隔离

1. 从一个真实事故说起:为什么“工作助手”变成了“数据杀手”去年年底,我帮一个做跨境电商的朋友排查一起数据丢失事件。他们团队用了一个开源的 AI Agent 框架,让 Agent 自动整理服务器上的订单报表、调用内部 API 生成对账单、再把结果写回…

阅读更多 →
AI财报分析提示词:让大模型按证据链输出可复核的财务结论 2026/9/30 10:25:06

AI财报分析提示词:让大模型按证据链输出可复核的财务结论

简介:面向金融商贸领域投资者与财务分析师的AI财报分析提示词模板,聚焦上市公司年报解读,解决三大报表指标计算、同行对比与现金流诊断等高频问题。资源压缩后为单个PDF文档,大小约484KB,内容按分析流程编排&#xff1…

阅读更多 →
DeepSeek API调用指南:参数调优、上下文管理与工具链集成实战 2026/9/30 10:25:06

DeepSeek API调用指南:参数调优、上下文管理与工具链集成实战

简介:一份围绕DeepSeek使用方法的指南,重点挖掘多数用户忽略的实用技巧;无论你是刚接触推理模型的初学者,还是希望提升问答质量的进阶用户,都能从这份资料中找到适合自己的用法。资源包内只有1个PDF文件,大…

阅读更多 →
Linux HugePages配置实战:从页表开销到数据库性能优化,彻底解决CPU高占用 2026/9/30 10:24:59

Linux HugePages配置实战:从页表开销到数据库性能优化,彻底解决CPU高占用

简介:本资源为一份PDF格式的Linux HugePages配置指南,面向需要优化大内存应用性能的系统管理员、DBA及运维工程师,尤其适合为Oracle数据库等场景快速启用大页内存。内容从memlock限制、vm.nr_hugepages参数设置到hugepages_settings.sh脚本的…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉