Docker/Python/LibreOffice:[Java framework]函数createSettingsDo



我目前很难找到以下错误的解决方案:

LibreOfficeError: [Java framework] Error in function createSettingsDocument (elements.cxx).
javaldx failed!
Warning: failed to read path from javaldx

我用subprocess.run从Python/gunicorn应用程序以无头模式启动libreOffice,用于将docx转换为pdf文件:

args = ['/usr/lib64/libreoffice/program/soffice', '--headless', '--convert-to', 'pdf', '--outdir', pdfDocFolder, tmpDocName]
process = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=timeout)

上面的错误消息是我在尝试启动转换时得到的。我的应用程序在docker容器中运行。奇怪的是,当我使用OpenShift的S2I构建过程来构建和部署映像时,它以前运行得很好。现在,在放弃S2I、在本地构建映像并将其部署在OpenShift上之后,我收到了错误消息。我在其他上下文中发现了一些关于相同错误消息的讨论,指出工作目录必须对非root用户可写,并导出为HOME。不幸的是,这并没有什么不同。我使工作目录对所有用户都是可写的。HOME设置为正确的目录。与本地docker构建相比,S2I构建过程一定有一些不同,这在权限方面会有所不同。这是我在本地构建图像时使用的两个Dockerfile:

基本图像:

FROM centos/python-36-centos7
EXPOSE 8080
USER root
RUN yum -y --disablerepo=* --enablerepo=base,updates update && 
yum -y install libreoffice && 
yum -y install unoconv && 
yum -y install cairo && 
yum -y install cups-libs && 
yum -y install java-1.8.0-openjdk && 
yum clean all -y && 
rm -rf /var/cache/yum

RUN chown 1001:0 /usr/bin/soffice && 
chown 1001:0 /usr/share/fonts/local && 
chown -R 1001:0 /usr/lib64/libreoffice && 
fix-permissions /usr/lib64/libreoffice -P && 
rpm-file-permissions

USER 1001

这就是构建在基础图像之上的Dockerfile:

ARG REGISTRY_PATH=
ARG BRANCH_NAME=
FROM $REGISTRY_PATH:$BRANCH_NAME-latest
USER root
ENV APP_ROOT=/opt/app-root
ENV PATH=${APP_ROOT}/bin:${PATH} HOME=${APP_ROOT}/src
COPY src ${APP_ROOT}/src
RUN pip install -r requirements.txt
RUN mkdir -p ${APP_ROOT}/.config/libreoffice/4/user && 
chmod -R a+rwx ${APP_ROOT}/src && 
chgrp -R 0 ${APP_ROOT}/src && 
chmod -R g=u ${APP_ROOT}/src /etc/passwd
EXPOSE 8080
USER 1001
WORKDIR ${APP_ROOT}/src
CMD ["gunicorn", "wsgi", "--bind", "0.0.0.0:8080", "--config", "config.py"]

一些尝试的暗示或想法真的会对我有帮助,因为我完全没有选择了。

非常感谢。

我知道这来得太晚了,但我在最近编写的SpringBoot微服务上遇到了同样的问题,对我来说,解决方案是将HOME env变量设置为分配给组的文件夹"0";,由于出于安全原因,Openshift使用随机用户运行容器,但所有用户都属于"0"组。这是我的档案:

FROM docker.io/eclipse-temurin:17.0.5_8-jre-alpine
RUN apk update &&  apk upgrade --no-cache
RUN apk add libreoffice
RUN chgrp -R 0 /tmp && chmod -R g=u /tmp
ENV HOME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"]

最重要的指令是

RUN chgrp -R 0 /tmp && chmod -R g=u /tmp

将正确的组分配给我将设置为HOME路径的文件夹。这种指令帮助我解决了将docker容器迁移到Openshift时的几个问题,redhat自己在构建图像的官方指南中也建议这样做:

https://docs.openshift.com/container-platform/4.9/openshift_images/create-images.html

希望这能有所帮助!:(

最新更新