Dify python code execution error: No usable temporary directory found in [‘/tmp’, ‘/var/tmp’, ‘/usr/tmp’, ‘/’] error: exit status 255

该报错通常出现在 Dify 自托管(Docker)环境中运行 Python 代码节点时,Dify Sandbox 找不到可用的临时目录。优先排查 Sandbox 容器内临时目录的权限与配置。

快速结论:该报错通常出现在 Dify 自托管(Docker)环境中运行 Python 代码节点时,Dify Sandbox 找不到可用的临时目录。优先排查 Sandbox 容器内临时目录的权限与配置。

适用环境:Dify 1.2.0;Self Hosted(Docker);涉及 Dify Sandbox Python 执行环境。Issue 中未提供更详细的 Python、CUDA、显卡或依赖版本信息。

最快修复方案:可优先尝试在 Sandbox 环境中为临时目录放开权限,例如执行 chmod -R 777 /var/sandbox/sandbox-python/tmp/。有评论指出该操作可以解决此问题。

注意事项:该方案来自 Issue 评论中的经验反馈,并非官方文档的通用修复步骤。将目录权限设置为 777 会放宽访问控制,建议仅在你理解安全影响、且为隔离的 Sandbox 环境时使用。Dify 或 Sandbox 不同版本、目录映射方式可能不同,路径需要按实际部署确认。

问题场景

用户在 Dify 1.2.0 自托管 Docker 环境中,尝试通过 Python 脚本读取 Exchange 邮件。网络和权限相关错误解决后,Python 代码执行阶段出现临时目录不可用错误。用户确认在 sandbox 里可以手动创建文件,/tmp 也显示为可写,并且将同一 Python 脚本上传到 sandbox 后直接运行可以成功。

报错原文

Dify python code execution error: No usable temporary directory found in ['/tmp', '/var/tmp', '/usr/tmp', '/'] error: exit status 255

原因分析

从报错看,Python 在执行过程中尝试在 /tmp/var/tmp/usr/tmp/ 中寻找可用的临时目录,但均未找到可用位置,最终以退出码 255 结束。Issue 评论中提到需要“Add the required sys_calls accordingly”,并指向 Dify Sandbox 的 config.yaml.example 配置。这说明可能原因不只是在宿主机或容器里存在可写目录,而是 Sandbox 的安全策略或系统调用限制没有允许 Python 正常使用临时目录。

另一个被验证过的处理方向是 Sandbox Python 临时目录权限不足或目录归属不符合运行要求。Issue 中有人建议对 /var/sandbox/sandbox-python/tmp/ 执行 chmod 777 后解决。因此,可能原因包括:Sandbox 配置中缺少必要的 sys_calls、临时目录路径未正确映射或权限不足、Sandbox 执行用户对目标临时目录没有写入权限。

环境排查

  • 确认当前 Dify 版本是否为 1.2.0,以及是否为 Self Hosted(Docker)部署。
  • 确认问题出现在 Dify Python 代码执行节点或 Sandbox Python 执行环境,而不是普通宿主机 Python 环境。
  • 进入 Sandbox 容器,检查 /tmp/var/tmp/usr/tmp/ 的权限与可写性。
  • 检查 Dify Sandbox 的配置文件,尤其是 docker/volumes/sandbox/conf/config.yaml.example 中与 sys_calls 相关的配置段。
  • 如果采用类似 /var/sandbox/sandbox-python/tmp/ 的路径,确认该目录是否存在、归属哪个用户、当前执行用户是否有写权限。
  • 检查 Docker volume 映射是否与 Sandbox 内部预期路径一致,避免宿主机目录存在但容器内不可写。

解决步骤

  1. 先确认报错确实来自 Dify Sandbox 的 Python 代码执行环节,而不是外部脚本或宿主机 Python 环境。
  2. 查看并对照 Dify Sandbox 的 config.yaml.example 中与 sys_calls 相关的配置,确认是否缺少执行 Python 临时文件操作所需的系统调用。Issue 评论明确提到“Add the required sys_calls accordingly”。
  3. 如果你使用的是类似 /var/sandbox/sandbox-python/tmp/ 的 Sandbox Python 临时目录,可优先尝试执行:chmod -R 777 /var/sandbox/sandbox-python/tmp/
  4. 修改后重启 Dify Sandbox 相关容器,使配置或权限变更生效。
  5. 重新在 Dify 中运行原先失败的 Python 代码节点,确认临时目录错误是否消失。

验证方法

重新执行同一个 Dify Python 代码节点或工作流。如果不再出现 No usable temporary directory foundexit status 255,并且代码能够进入正常执行逻辑,即可认为问题已缓解。Issue 中提到,同样的 Python 脚本在 sandbox 中直接运行可以成功,因此也可以用“上传脚本到 sandbox 直接运行”的方式做对照验证:如果直接运行正常、Dify 节点运行失败,重点继续检查 Sandbox 配置与 sys_calls;如果权限调整后 Dify 节点也正常,则说明临时目录权限或配置映射是主要问题。

参考来源

langgenius/dify #18678

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 23469

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注