如何使 dockerized Flask 应用程序将输出写入文件?

Dav*_*cco 3 python flask docker docker-compose

我试图让托管(dockerized)Flask 应用程序的服务器“记录”发送给它的请求,只需将它们写入文本文件即可。

我的docker-compose.yml样子

version: '2'

services:
  writer:
    build: writer/
    ports: 
      - 5000:5000
    container_name: writer
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

作为参考,我Dockerfile在同一writer目录中是:

FROM python:3.6-slim
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt
ENTRYPOINT [ "python", "writer.py" ]
Run Code Online (Sandbox Code Playgroud)

requirements.txt简直就是

flask
Run Code Online (Sandbox Code Playgroud)

示例请求是

curl -H "Content-Type:application" -X POST -d '{"Content":"Hello world"}' http://0.0.0.0:5000/feedback
Run Code Online (Sandbox Code Playgroud)

不幸的是,没有feedback.txt在本地写入(例如在容器外部)。您能否提示我应该执行哪些修改docker-compose.yml(例如,使用卷?)以便feedback.txt在服务器上进行写入和访问?

Tho*_*lik 5

您必须在 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
Run Code Online (Sandbox Code Playgroud)