我目前很难找到以下错误的解决方案:
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
希望这能有所帮助!:(