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
相关产品推荐
相关产品推荐

