You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Django时生成存储QR码提示文件/目录不存在

问题解决:Docker部署时无法创建二维码文件

问题核心

本地运行正常但Docker部署报错,本质是容器内的/app/static/QR目录不存在。本地环境中该目录可能已手动创建或之前运行程序时自动生成,但Docker容器是全新环境,默认不会自动生成这个目录,直接调用open()写文件时会因父目录不存在抛出No such file or directory错误。

解决方案

方案1:在Dockerfile中提前创建目录

构建镜像时直接创建目标目录,确保容器启动后目录存在:

# 添加到Dockerfile中,放在COPY或安装依赖的步骤之后
RUN mkdir -p /app/static/QR

如果容器使用非root用户运行,需同步设置目录权限:

RUN mkdir -p /app/static/QR && chown -R your_app_user:your_app_user /app/static/QR

方案2:在Python代码中自动创建目录

在写入文件前,先检查并创建目录(兼容本地和Docker环境):

import os
from django.conf import settings

# 原有代码
nombre_archivo = f'QR-{request.user.instituto.id}-{idRecibo}.png'
UPLOADS_PATHS = os.path.join(settings.QR_ROOT, nombre_archivo)

# 创建目录(exist_ok=True避免目录已存在时报错)
os.makedirs(settings.QR_ROOT, exist_ok=True)

with open(UPLOADS_PATHS, 'wb') as f:
    f.write(response.content)

额外注意点

  • 原QR_ROOT = os.path.join(BASE_DIR, 'static/QR')的定义是正确的,添加./不会解决目录不存在的问题
  • 确认BASE_DIR在Docker环境中指向/app(Django默认的BASE_DIR定义通常无需修改)

内容的提问来源于stack exchange,提问作者Santiago Dellacasa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:05:22