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

Docker容器内Flask应用无法定位本地上传文件问题求助

解决Docker中Flask应用无法访问宿主机本地文件的IOError问题

嘿,这个问题我太熟了!Docker容器是个独立的隔离环境,你直接在Flask代码里写宿主机C盘的绝对路径,容器根本认不出这个路径——毕竟它有自己的文件系统,这就是为啥会弹出IOError: [Errno 2] No such file or directory错误。给你几个靠谱的解决步骤:

1. 用Docker卷挂载宿主机文件夹到容器

这是最核心的一步,得把你宿主机的C:/Users/RB287JD/Desktop/upload文件夹“共享”给容器,让容器能访问到里面的文件:

  • 先修改Flask代码里的上传目录配置,改成容器内部的路径(比如/app/upload,假设你的Flask代码在容器的/app目录下)
  • 运行容器的时候,加上-v参数完成挂载,命令示例:
    docker run -v C:/Users/RB287JD/Desktop/upload:/app/upload -p 5000:5000 你的镜像名称
    
    这里的:左边是宿主机路径,右边是容器内部对应的路径,两者会实时同步。

2. 修正Flask代码中的路径配置

原来的代码用容器内的APP_ROOT拼接宿主机路径是完全错误的,改成容器内部的路径就行:

import os
from flask import Flask

app = Flask(__name__)

# 容器内部的上传目录,和挂载的路径保持一致
UPLOAD_FOLDER = '/app/upload'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

# 提前创建目录,避免后续操作报错
os.makedirs(UPLOAD_FOLDER, exist_ok=True)

# 你的其他代码...
class mainSessRunning():
    def __init__(self):
        host, port = ...

3. 验证挂载是否生效

怕配置错了?可以进入容器内部检查一下:

# 替换成你的容器ID或名称
docker exec -it 你的容器ID bash
# 查看容器内的上传目录是否有宿主机的文件
ls /app/upload

如果能看到file.txt,说明挂载成功了,Flask也能正常访问这个文件了。

额外提示:用Docker Compose的配置方式

如果你习惯用Docker Compose管理容器,直接在docker-compose.yml里加volumes配置就行:

version: '3'
services:
  flask-app:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - C:/Users/RB287JD/Desktop/upload:/app/upload

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:14:17