我想在docker里面使用pandoc,图片如下:
FROM debian:buster-slim
RUN apt-get update && apt-get install -y pandoc texlive
WORKDIR /home
这是build.sh
项目内部:
cp *.ttf /usr/local/share/fonts/ && fc-cache;
pandoc -o output.pdf input.md
我想像这样运行:
docker run --rm -t -v $(pwd):/home pandoc_container build.sh
这导致output.pdf
在我的主机上由 root 拥有。执行时:
docker run --user $(id -u) --rm -t -v $(pwd):/home pandoc_container build.sh
相反,该文件将归我所有,但由于缺少写入权限,字体文件无法复制到该目录。添加
RUN chmod a+w /usr/local/share/fonts/
Dockerfile 解决了这个问题,但是由于许多目录中缺少写权限,命令fc-cache
失败并出现很多错误。failed to write cache
将字体文件复制到~/.fonts
也不起作用,因为创建的用户--user $(id -u)
实际上并不存在于容器中:
I have no name!@0d9c6a272ae1:/home$
因此没有主目录,无法被解析fc-cache
。
有什么优雅的方法可以解决这个问题?
答案1
答案很简单,只需添加
chown $UID output.pdf
然后build.sh
向 docker 传递一个环境变量而不是用户 id:
docker run -e UID=$(id -u) --rm -t -v $(pwd):/home pandoc_container build.sh