Как я могу сделать вывод приложения Dockerized Flask для записи в файл? - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь сделать так, чтобы сервер, на котором размещено (закрепленное) приложение Flask, «регистрировало» запросы, которые ему отправлялись, просто записывая их в текстовый файл.

Мой docker-compose.yml выглядит как

version: '2'

services:
  writer:
    build: writer/
    ports: 
      - 5000:5000
    container_name: writer

и внутри каталога writer у меня есть файл writer.py, как показано ниже, который должен получить запрос и записать его в локальный файл feedback.txt:

from flask import Flask, request, jsonify

app = Flask(__name__, static_url_path='')

@app.route('/feedback', methods=['POST']) 
def log_feedback():
    with open("feedback.txt","a") as fo:
        fo.write(request.data.decode("utf-8"))
        print(request.data.decode("utf-8"))
        fo.write('\n')
    return 'Got it!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug = False)

Для справки, мой Dockerfile в том же writer dir:

FROM python:3.6-slim
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt
ENTRYPOINT [ "python", "writer.py" ]

requirements.txt это просто

flask

И запрос образца

curl -H "Content-Type:application" -X POST -d '{"Content":"Hello world"}' http://0.0.0.0:5000/feedback

К сожалению, feedback.txt не пишется локально (например, вне контейнера). Можете ли вы намекнуть мне изменения, которые я должен выполнить, например, в docker-compose.yml (например, с томами?), чтобы получить feedback.txt, написанный и доступный на сервере?

1 Ответ

0 голосов
/ 27 апреля 2018

Вы должны добавить том в docker-compose.yml. Путь в контейнере должен содержать папку, содержащую записанный файл. Путь к локальной папке должен содержать папку в вашей системе, где вы хотите увидеть записанный файл.

version: '2'

services:
  writer:
    build: writer/
    ports: 
      - 5000:5000
    container_name: writer
    volumes:
      - /PATH/TO/YOUR/LOCAL_FOLDER:/PATH/TO/FOLDER/IN/CONTAINER
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...