求助:ECS Fargate运行Docker任务时出现无可用临时目录错误
ECS Fargate中Python临时目录不可用错误原因分析
核心原因
Fargate只读根文件系统限制
ECS Fargate默认采用只读根文件系统(仅/tmp目录是挂载的可写临时卷)。你自定义的/documents_api_tmp目录位于只读根文件系统上,尽管构建阶段设置了全权限,但运行时Fargate不允许对根文件系统进行写入操作,导致runner用户无法在该目录创建临时文件。自定义TMPDIR未指向可写挂载点
你通过ENV TMPDIR=/documents_api_tmp指定了临时目录,但该目录不在Fargate默认的可写挂载范围内。本地Docker运行时根文件系统默认可写,所以该配置能正常工作;但Fargate环境下这个目录是只读的,Python遍历临时目录列表时找不到可写路径,抛出FileNotFoundError。构建阶段权限设置不生效
构建时你给/documents_api_tmp设置了777权限和粘滞位,但这些操作仅在构建镜像的文件系统中有效。Fargate运行时会替换根文件系统为只读模式,之前的权限设置无法覆盖运行时的文件系统属性。
修复建议
改用Fargate默认的可写
/tmp目录
删除Dockerfile中自定义临时目录的相关代码,直接使用Fargate自动挂载的/tmp卷:# 移除以下代码 # RUN mkdir -p /documents_api_tmp && chmod 777 -R /documents_api_tmp && chmod o+t -R /documents_api_tmp # ENV TMPDIR=/documents_api_tmp若需显式指定TMPDIR,直接指向
/tmp:ENV TMPDIR=/tmp确保
runner用户对/tmp有写入权限
可在构建阶段添加权限确认(可选,Fargate默认/tmp权限为777):RUN chmod 777 /tmp
内容的提问来源于stack exchange,提问作者ALTAF HUSSAIN
相关产品推荐
相关产品推荐

