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

时间:2018-07-02 18:18:00

标签: 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映像中下载文件。当我尝试通过邮递员或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

0 个答案:

没有答案