невозможно получить доступ / загрузить сгенерированную папку, которая находится внутри контейнера Docker, используя вызовы REST API - PullRequest
0 голосов
/ 02 июля 2018

Я пытался решить эту проблему довольно давно, и я почти уверен, что это просто глупая ошибка, но я действительно разочаровываюсь в жизни.

Справочная информация: У меня есть приложение на Python Flask, предоставляющее RESTful-сервисы. Это приложение работает внутри док-контейнера. некоторые функции GET возвращают ответы Json, они просты и работают нормально. некоторые, однако, немного сложнее. В контейнере Docker есть файл, называемый «сгенерированный», что 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. Когда я пытаюсь получить доступ к файлу через почтальона или скручивание, я получаю 404 ошибку Я также пытался изменить путь для загрузки файла вне изображения, но это тоже не работает. Вероятно, это порт для публикации / раскрытия в Docker, но я в этом не разбираюсь.

Это мой докер-файл:

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

мой докер-compose.yml

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