Я хочу использовать 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 ответ1

0

Ответ так же прост, как добавление

chown $UID output.pdf

build.sh и затем передать docker env-var вместо идентификатора пользователя:

docker run -e UID=$(id -u) --rm -t -v $(pwd):/home pandoc_container build.sh

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .