每次在基于Ubuntu焦点的Docker容器中运行脚本时,我都会收到这样的警告:
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-'
我怎样才能修好它,或者至少让它安静下来?
我知道this issues说它不是一个人应该试图修复的东西。不过,这有点影响了我的输出。
发布于 2022-03-22 13:25:22
如果您想消除警告,因为您位于容器中,并且不太可能像链接的问题中所指出的那样,出现多个用户将有文件权限问题的问题,那么您可以简单地定义一个环境变量并使其指向/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'" \
]
https://stackoverflow.com/questions/71571296
复制相似问题