【发布时间】:2018-04-27 11:06:49
【问题描述】:
我正在尝试使托管(dockerized)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)
作为参考,我在同一个writer 目录中的Dockerfile 是:
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?
【问题讨论】:
-
你可以试试
open("/app/feedback.txt","a")吗? -
谢谢!我试过这样做,但
writer目录中的feedback.txt没有被修改:( -
如果您没有指定任何卷,则容器内的数据不会映射到主机。 You should specify a volume 在你的 docker-compose 文件中。
标签: python docker flask docker-compose