У меня появляется это предупреждение каждый раз, когда я запускаю скрипт в своем контейнере Docker на основе Ubuntu focus:
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-'
Как это исправить или хотя бы заглушить?
Я знаю это проблемы, в котором говорится, что это не то, что нужно пытаться исправить. Тем не менее, это немного портит мои результаты.
Если вы хотите избавиться от предупреждения, поскольку вы находитесь в контейнере, и у вас вряд ли возникнет проблема с тем, что у нескольких пользователей будет проблема с правами доступа к файлам, как указано в вопросе, который вы связываете, тогда вы можете просто определить среду переменную и сделайте так, чтобы она указывала на каталог /tmp.
Вот пример использования pandoc
и wkhtmltopdf
, который обычно дает эту ошибку:
FROM ubuntu:focal
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -qq \
&& apt-get install --yes pandoc wkhtmltopdf \
&& echo "# Hello world!" > demo.md
ENV XDG_RUNTIME_DIR=/tmp
## ^-- This is the interesting line for you
CMD [ \
"pandoc", \
"demo.md", \
"--output", "demo.pdf", \
"--pdf-engine", "wkhtmltopdf", \
"--metadata", "pagetitle='Demo'" \
]
Без ENV
это даст:
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
Loading page (1/2)
Printing pages (2/2)
Done
С ним тогда было бы:
Loading page (1/2)
Printing pages (2/2)
Done
Если вы хотите сделать это, как советуется, с папкой /run/user/<UID>
, вам нужно сначала создать папку и назначить ей правильное право.
Для контейнеров, работающих как root
:
FROM ubuntu:focal
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -qq \
&& apt-get install --yes pandoc wkhtmltopdf \
&& echo "# Hello world!" > demo.md \
&& mkdir -p -m 0700 /run/user/0
## ^-- now you also have this last line
ENV XDG_RUNTIME_DIR=/run/user/0
## ^-- And still that one
CMD [ \
"pandoc", \
"demo.md", \
"--output", "demo.pdf", \
"--pdf-engine", "wkhtmltopdf", \
"--metadata", "pagetitle='Demo'" \
]
Для контейнеров, работающих от имени другого пользователя:
FROM ubuntu:focal
ARG DEBIAN_FRONTEND=noninteractive
ARG UID=1000
WORKDIR /tmp
RUN apt-get update -qq \
&& apt-get install --yes pandoc wkhtmltopdf \
&& echo "# Hello world!" > demo.md \
&& chmod 766 demo.md \
&& useradd --uid "${UID}" user \
&& mkdir -p -m 0700 /run/user/"${UID}" \
&& chown user:user /run/user/"${UID}"
## ^-- and, now, you have those three last lines
USER user
ENV XDG_RUNTIME_DIR=/run/user/"${UID}"
## ^-- And still that one, plus the user definition, of course
CMD [ \
"pandoc", \
"demo.md", \
"--output", "demo.pdf", \
"--pdf-engine", "wkhtmltopdf", \
"--metadata", "pagetitle='Demo'" \
]