在 Docker 容器内同时拥有非特权和 root 权限

在 Docker 容器内同时拥有非特权和 root 权限

我想在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

相关内容