python - 无法使用 REST API 调用访问/下载 Docker 容器内生成的文件夹

标签 python docker flask docker-compose dockerfile

我已经尝试解决这个问题很长一段时间了,我很确定这只是一个非常愚蠢的错误,但我真的要放弃生活了。

背景:我有一个提供 RESTful 服务的 Flask python 应用程序。这个应用程序在 docker 容器中运行。一些 GET 函数返回 Json 响应,它们很简单并且工作正常。但是,有些要复杂一些。 docker 容器内有一个名为“generated”的文件,get_files 在这里所做的是将其压缩为 Zip 文件,然后下载生成的 zip 文件。

from flask import Flask, render_template, request, jsonify, redirect, url_for, send_from_directory
import zipfile

app = Flask(__name__)
#app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

#gets all elements 
@app.route('/elementsdb/ecu',methods=['GET']) 
def getAllElements(): 
     return jsonify({'ecus':elementsDB})  

#-------------------------------------------#
#Get files
@app.route('/get_files', methods=['GET'])
def download():
    zf = zipfile.ZipFile('gen.zip', mode = 'w')
    zf.write('generated/one.c')
    zf.write('generated/two.c')
    zf.write('generated/three.c')
    zf.write('generated/four.h')
    zf.close()
    return send_from_directory("/Users/abeer/downloads/testD", "gen.zip", as_attachment=True)

问题:/get_files 在本地主机上独立运行时工作正常。 http://localhost:5000/get_files但是因为该应用程序位于 docker 容器中,所以它会在 docker 镜像中下载文件。当我尝试通过 postman 或 curl 访问该文件时,我得到一个 404 error我也试过更改路径以下载图像外的文件,但这也不起作用。这可能是 Docker 中的发布/公开端口问题,但我对此一无所知。

这是我的 dockerfile:

FROM python:2.7
ADD . /todo
WORKDIR /todo
RUN pip install -r requirements.txt

我的 docker-compose.yml

web:
  build: .
  command: python -u flaskdb.py
  ports:
    - "5000:5000"
  volumes:
    - .:/todo
  links:
    - db
db:
  image: mongo:3.0.2

最佳答案

这有点太晚了,无法帮助你,但对于其他即将放弃生活的人来说,它在 docker 上不起作用,因为路径 /Users/abeer/downloads/testD 不存在于容器上,因此 404

您需要通过使用 volumes 将路径映射到它来告诉容器使用该路径, 那么它将起作用

关于python - 无法使用 REST API 调用访问/下载 Docker 容器内生成的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51141745/

相关文章:

python - 如何将类对象列表转换为其属性列表

docker - Github Actions with Docker - 找不到 node_modules 状态文件 - 运行安装可能有帮助 (findPackageLocation)?

ios - Docker设置-无法运行世界

python - flask ,SQLAlchemy : KeyError: 'SQLALCHEMY_TRACK_MODIFICATIONS'

python - RESTful-Flask 使用 parse_args() 解析 JSON 数组

Python Libcod : How to do pathfinding with variable move cost terrain?

python - 带有自定义 Estimator 的 Tensorflow 指标

python - 未指定端点 url 时,boto3 sqs 的 url 不正确

docker - 我可以将我的 docker 存储库/图像放在 GitHub/Bitbucket 上吗?

python - Flask 应用程序充当两个不同的应用程序