是否可以从docker下载文件到本地驱动器

问题描述 投票:0回答:1

我有一个 Python dash 应用程序,它有一个用于从 docker 下载 Excel 文件的按钮。下面是一个用于此目的的最小示例。当文件夹是我的本地驱动器时,按钮按预期工作,并开始下载。但是,当 FOLDER 是 docker 路径 (/app/data) 按钮时不起作用,我得到这个:

有办法解决这个问题吗?

谢谢!!

import dash
import dash_bootstrap_components as dbc
from dash import html
from flask import send_from_directory

app = dash.Dash(external_stylesheets=[dbc.themes.SIMPLEX])
server = app.server

FOLDER = 'C:/TEST'
# FOLDER = '/app/data'

app.layout = html.Div([
dbc.Button(
    children="Test",
    href=f'/{FOLDER}/abc.xlsx',
    download="abc.xlsx",
    external_link=True
   )
])


@server.route(f'/{FOLDER}/<path:filename>')
def download_file(filename):
   try:
       return send_from_directory(FOLDER, filename, as_attachment=True)
   except Exception as e:
       return str(e)


if __name__ == '__main__':
   # app.run_server(host='0.0.0.0', port='8085', debug=True)
   app.run_server(debug=True)
python docker plotly-dash
1个回答
0
投票

您可能想使用 docker 查看卷安装 - 根据设计,容器内部的路径无法从父系统访问,但您可以通过 docker cli 或通过 docker compose 卷挂载特定目录,将容器内的特定目录挂载到磁盘外部的路径,然后更改要加载的 URL 以从那里提取数据。

在 docker compose 中,例如:

services:
  frontend:
    image: python3.9 #or whatever you like
    volumes:
      - C:/test/:/app/data

现在您的容器可以写入 /app/data,您将在 C:/test/ 中看到它。

有很多方法可以强化这一点(例如,通过 .env var 传递目录) - 您可能还可以更好地从 Flask 应用程序内部的相对路径提供文件,但如果您需要它们之外的文件容器、体积安装是您最好的选择

© www.soinside.com 2019 - 2024. All rights reserved.