【发布时间】:2021-11-19 10:29:53
【问题描述】:
我尝试将 libreoffice 安装到 lambda 函数的 docker 映像。当我在本地机器上运行它时它工作正常,但是当将图像部署到 lambda 函数时,它一直说“无法从 javaldx 读取路径”并且无法打开 soffice。有什么解决方案可以解决这个问题吗? 这是 DockerFile:
FROM public.ecr.aws/lambda/nodejs:12
RUN yum install wget tar -y
RUN yum install java-1.8.0-openjdk-devel -y
RUN mkdir "LibreOffice_7.2_Linux_x86-64_rpm"
ADD LibreOffice_*_Linux_x86-64_rpm ./LibreOffice_7.2_Linux_x86-64_rpm
RUN ls -la
RUN cd LibreOffice_*_Linux_x86-64_rpm && cd RPMS && yum -y localinstall *.rpm
RUN chmod -R 777 /opt/libreoffice7.2
ADD test.docx ./
RUN export HOME=/tmp
COPY index.js package*.json ./
RUN npm install
CMD [ "index.handler" ]
这是我的处理程序代码:
/* Amplify Params - DO NOT EDIT
ENV
REGION
STORAGE_DOCBACKENDD3C9A483_BUCKETNAME
Amplify Params - DO NOT EDIT */
const {writeFileSync, readFileSync} = require('fs');
const {execSync} = require('child_process');
const {S3} = require('aws-sdk');
const s3 = new S3(
{
params: {
Bucket: "documentgenerationb25c0536d4054b9faeafca747e3f295559-dev",
apiVersion: '2006-03-01'
}
}
);
const convertCommand = `/opt/libreoffice7.2/program/soffice --convert-to pdf test.docx --headless`;
exports.handler = async () => {
const filename = "test.docx"
const {Body: inputFileBuffer} = await s3.getObject({Key: `public/${filename}`}).promise();
writeFileSync(`/tmp/${filename}`, inputFileBuffer);
execSync(`${convertCommand} ${filename}`);
const outputFilename = `test1-brandon.pdf`;
const outputFileBuffer = readFileSync(`/tmp/${outputFilename}`);
await s3
.putObject({
Key: `public/${outputFilename}`, Body: outputFileBuffer,
ACL: 'public-read', ContentType: 'application/pdf'
})
.promise();
return `https://documentgenerationb25c0536d4054b9faeafca747e3f295559-dev.s3.amazonaws.com/public/${outputFilename}`;
};
【问题讨论】:
标签: node.js amazon-web-services docker aws-lambda libreoffice