当前位置: 首页 > 知识库问答 >
问题:

AWS Lambda只读文件系统错误无法使用Docker映像创建目录

饶德本
2023-03-14

Docker image编译成功,但从Lambda运行时由于其只读文件系统而失败。

Luminati proxy为其代理管理器提供了docker集成。我复制了他们的docker文件,并将其附加到我自己的docker文件中,以便向AWS Lambda推出一个脚本。docker映像的构建成功,但在推送到Lambda时,由于只读文件系统错误而失败:

Failed to create directory /home/sbx_user1051/proxy_manager: [code=EROFS] Error: EROFS: read-only file system, mkdir '/home/sbx_user1051'
2022-02-28 19:37:22.049 FILE (8): Failed to create directory /home/sbx_user1051/proxy_manager: [code=EROFS] Error: EROFS: read-only file system, mkdir '/home/sbx_user1051' 

检查trackback后,错误集中在proxy\u manager安装上,并且由于目录更改(mkdir、mk\u work\u dir…)而失败。这些变化是在公司内部进行的。GitHub的js文件,作为proxy\u manager安装从docker文件中提取。很明显,Lambda上唯一可变的目录是/tmp目录,但是有没有一种解决方法,可以在运行时擦除自身时不必将所有内容都放在/tmp目录下就可以进行设置?每次运行都重新安装proxy\u管理器一点也不理想。。。

这是否可以像设置环境规定一样简单,例如:

ENV PATH=...
ENV LD_LIBRARY_PATH=...

如果是,我应该如何配置它们?我在下面添加docker文件以供快速参考:

FROM node:14.18.1
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
    && apt-get update \
    && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf \
      --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

USER root
RUN npm config set user root
RUN npm install -g npm@8.1.3
RUN npm install -g @luminati-io/luminati-proxy
ENV DOCKER 1
CMD ["luminati", "--help"]

我很欣赏你的洞察力!

共有2个答案

空浩淼
2023-03-14

AWS Lambda提供 /tmp文件夹供用户在lambda上写入文件,因为我不了解您的问题上下文,但希望这能有所帮助。您可以在 /tmp文件夹中将文件写入AWS Lambda,例如。我想在运行时创建一个文件demo.txt/使用AWS lambda以编程方式,然后我可以将文件写入 /txt/demo.txt

岳浩穰
2023-03-14

太长别读:

  • 相反,您应该利用S3 bucket来存储、读取和修改任何文件。所有Lambda和微服务。一般来说,应始终被视为无国籍
  • 所有Luminati代理功能都是在amazon lambdas和API网关中预先构建的
  • Lambda函数不打算运行长时间运行的进程,因为它们最多只能运行15分钟,因此您尝试在Lambda中运行的容器的设计必须在其设计中考虑AWS无服务器架构

解释:

根据AWS Lambda功能文件:

容器映像必须能够在只读文件系统上运行。您的函数代码可以访问存储容量为512 MB的可写/tmp目录。

由于基于Linux映像的容器已经应该有一个名为/tmp的文件夹,因此您应该能够随时从代码中访问该文件夹以进行读取(记住,只读FS)

如果您希望存储内容,amazon的解决方案是让您在S3存储桶上创建和管理任何内容,那么存储桶的使用就像您在本地读取文件一样简单,但在lambda实例完成工作负载后仍然可以访问

有关如何使用S3存储桶的更多详细信息,请参阅使用node fs从aws s3存储桶读取文件并使用NodeJS将文件上传到Amazon S3。无论使用何种语言,都有很多方法可以实现它。

这一切都基于AWS在其平台上推广的最佳实践。Lambda保持无状态

 类似资料:
  • 问题内容: 我在Kubernetes上部署Airflow时遇到错误(正是这个版本的Airflow https://github.com/puckel/docker- airflow/blob/1.8.1/Dockerfile )关于将权限写入文件系统。 窗格的日志中显示的错误是: 看来文件系统是只读的,但我不明白为什么会这样。我不确定这是否是 Kubernetes的错误配置 (我是否需要Pod专用

  • 好吧,所以我有一个节点应用程序可以访问其文件结构中的目录并对其进行处理。我正在使用“fs”模块来完成这一点。当我从它的映像运行容器时,我得到以下错误: 我立即想到了一大堆可能出错的事情,直到我连接到正在运行的容器(重新启动它之后,因为容器会在出错时死亡......当然)。当我从容器内部启动节点应用时。成功了。。无错误。 我相信这可能与docker图像分层时处理文件系统的方式有关,但当它工作正常时,

  • 我参考了Docker官方文档:创建基本映像并执行以下命令: 我收到上一个命令的错误消息,图像“raring”为空,0B。 由于映像是空的,我将目标从 /dev/null更改为。/rootfs参考此页面:如何为Docker制作自己的基本映像? 但Debootstrap无法获取发布: 使用wget和我的浏览器,我发现“http://archive.ubuntu.com/ubuntu/dists/rar

  • 我想在我的Ubuntu上运行我的 Scrape.py Docker。我的步骤: 我使用 我创建了一个Docker文件: 请问有什么问题?谢谢

  • 问题内容: File mediaDir = new File(“media”); if (!mediaDir.exists()){ mediaDir.createNewFile(); mediaDir.mkdir(); 尝试在手机内部存储器中写入文件,但会引发错误: java.io.IOException:只读文件系统 问题答案: 猜猜/ data / data不是外部存储。您需要具有root用户

  • 我试图为流星应用程序创建一个5.1.1的Android模拟器。到目前为止,我一直在遵循这些步骤,但是当我试图创建时,我得到消息“没有CPU/ABI系统映像可用于此目标”。 我搞砸了吗? 使现代化 我不确定它是否重要,但是当我打开SDK时,我得到了这些信息: 吸引人https://dl.google.com/android/repository/addons_list-2.xml 成功获取加载项列表