动机

动机

动机

原始问题来自pandoc 讨论

pandoc --pdf-engine=lualatex test.md -o test.pdf使用如下源文件构建 Docker 镜像test.md

---
mainfont: TeX Gyre Termes
---

Lorem ipsum ttt

关于 pandoc 的 Docker 镜像的背景信息

官方 Docker 镜像pandoc/latex:latest已安装TeXLive 下/opt其写入权限仅保留给 root 用户。默认情况下,容器以 root 用户身份运行。

$ docker run --rm --entrypoint="" pandoc/latex:latest sh -c 'whoami'
root

要使用 Docker 运行 pandoc,将 README.md 转换为 README.pdf:

$ docker run --rm --volume "$(pwd):/data" --user $(id -u):$(id -g) \
pandoc/latex README.md -o README.pdf

来源:pandoc 安装 #Docker

!$(pwd)将当前目录中的所有内容放入/data从映像构建的 Docker 容器中pandoc/latex:latest,然后容器pandoc README.md -o README.pdf使用基础系统中的用户和组权限运行,然后结束。README.pdf容器结束后输出仍然存在。包括,--rm以便它不会记录在容器列表中docker ps

Docker 的背景信息USER

为了避免在 Docker 容器中以 root 身份运行,可以指定USER nameDockerfile

问题

我尝试test.md编译我的Dockerfile,它使用了普通用户的身份USER pptruser,我收到了一条无用的消息,显示“致命错误”。为了进一步了解该问题,我首先test.md使用test.tex

$ pandoc -s test.md -o test.tex

在我使用 Docker 容器编译 LuaLaTeX 之前,我的Dockerfile

$ docker run --rm --volume "$(pwd):/home/pptruser" --user $(id -u):$(id -g) \
customDockerImage:1.0 --pdf-engine=lualatex test.md -o test.pdf
This is LuaHBTeX, Version 1.12.0 (TeX Live 2020) 
 restricted system commands enabled.
(./201113-TAM-compte-rendu.tex
LaTeX2e <2020-10-01> patch level 2



luaotfload | load : FATAL ERROR
luaotfload | load :   × Failed to load "fontloader" module "basics-gen".
luaotfload | load :   × Error message:
luaotfload | load :     × "...dir/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua:306: system : no writeable cache path, quiting".

stack traceback:
    ...dir/texmf-dist/tex/luatex/luaotfload/luaotfload-main.lua:174: in local 'load_fontloader_module'
    ...dir/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua:308: in upvalue 'init_main'
    ...dir/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua:560: in function 'luaotfload-init.lua'
    ...dir/texmf-dist/tex/luatex/luaotfload/luaotfload-main.lua:298: in field 'main'
    [\directlua]:1: in main chunk

...dir/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua:306: system : no wr
iteable cache path, quiting
stack traceback:
    [C]: in function 'error'
    ...dir/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua:306: in function '
os.exit'
    ...dir/texmf-dist/tex/luatex/luaotfload/luaotfload-main.lua:177: in local 'loa
d_fontloader_module'
    ...dir/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua:308: in upvalue 'i
nit_main'
    ...dir/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua:560: in function '
luaotfload-init.lua'
    ...dir/texmf-dist/tex/luatex/luaotfload/luaotfload-main.lua:298: in field 'mai
n'
    [\directlua]:1: in main chunk.
<everyjob> ...ring \\def\string \\encodingdefault{OT1}')end }
                                                  \let \f@encoding \encoding...

l.1 
  % Options for packages loaded elsewhere

原因no writeable cache path导致luaotfload了错误。我发现,如果我删除USER pptruser相关设置并以 root 身份运行所有内容,则错误就会消失。

我想知道是否有办法构建一个,以便包含字体 TeX Gyre Termes 与 LuaLaTeX PDf 引擎Dockerfile的编译可以工作。test.md

答案1

解决方案非常简单:确定“可写缓存路径”,并赋予每个人可写权限。在 Docker 镜像 pandoc/latex:latest 中,它是/opt/texlive/texdir/texmf-var

我解决了这个问题提交 VincentTam/pandoc-mermaid-docker@d86343f0在 GitLab 上附加

chmod o+w /opt/texlive/texdir/texmf-var

RUN创建用户的命令(pptruser在从 root 更改为普通用户之前的某个地方)。

相关内容