构建完整TexLive Docker镜像时安装包后出现错误
解决TexLive Docker镜像构建失败问题
问题描述
构建以下Dockerfile时返回非零代码2失败,数月前该构建可正常完成:
FROM texlive/texlive:latest-minimal # 76d39535e480 RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get upgrade -y && rm -rf /var/lib/apt/lists/* RUN tlmgr update --self && tlmgr install scheme-full
错误出现在构建最后阶段,关键日志片段如下:
... [4411/4412, 44:50/44:50] install: collection-xetex [1k] [4412/4412, 44:51/44:51] install: scheme-full [1k] running mktexlsr ... done running mktexlsr. running mtxrun --generate ... tlmgr: mtxrun --generate failed (status -1), output: running updmap-sys ... done running updmap-sys. regenerating language.dat regenerating language.def regenerating language.dat.lua regenerating fmtutil.cnf in /usr/local/texlive/2022/texmf-dist ... running fmtutil-sys --byhyphen "/usr/local/texlive/2022/texmf-var/tex/generic/config/language.dat.lua" --no-error-if-no-engine=luajithbtex,luajittex,mfluajit --status-file=/tmp/LTvdge0FWk/deFZm0cUtU ... tlmgr: An error has occurred. See above messages. Exiting. tlmgr: package log updated: /usr/local/texlive/2022/texmf-var/web2c/tlmgr.log tlmgr: command log updated: /usr/local/texlive/2022/texmf-var/web2c/tlmgr-commands.log The command '/bin/sh -c tlmgr update --self && tlmgr install scheme-full' returned a non-zero code: 2
错误提示要求查看上方输出,但无法找到更多有效诊断信息。
解决方案
1. 锁定镜像版本
latest-minimal标签会随时间更新,新版本可能引入兼容性问题。改用之前成功构建的特定版本镜像:
FROM texlive/texlive:76d39535e480 # 直接使用原注释中的哈希值 RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get upgrade -y && rm -rf /var/lib/apt/lists/* RUN tlmgr update --self && tlmgr install scheme-full
2. 跳过自动构建步骤(临时 workaround)
若必须使用最新镜像,可通过修改tlmgr配置跳过导致失败的自动生成步骤,再手动执行必要操作:
FROM texlive/texlive:latest-minimal RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get upgrade -y && rm -rf /var/lib/apt/lists/* # 关闭tlmgr自动构建,跳过mtxrun生成环节 RUN tlmgr update --self && tlmgr options autobuild 0 && tlmgr install scheme-full # 手动执行后续必要的索引和格式生成 RUN mktexlsr && updmap-sys && fmtutil-sys --all
3. 增加容器资源分配
mtxrun --generate失败可能是容器内存不足导致进程被强制终止,构建时增加内存限制:
docker build --memory=4g .
原因分析
- 最新
texlive/texlive:latest-minimal镜像中的tlmgr版本或依赖库更新,引发mtxrun --generate执行异常。 - 容器内存不足时,mtxrun进程会被系统终止,返回状态码-1进而导致构建失败。
内容的提问来源于stack exchange,提问作者obfish
相关产品推荐
相关产品推荐

