Python docker启动参数为-d时,flask应用程序可以在docker控制台上打印,但启动参数为-it时不能打印

Python docker启动参数为-d时,flask应用程序可以在docker控制台上打印,但启动参数为-it时不能打印,python,docker,flask,dockerfile,Python,Docker,Flask,Dockerfile,我有一个flask应用程序,非常简单,没有任何操作,代码如下,仅用于测试: from flask import Flask app1 = Flask(__name__) @app1.route('/', methods=['POST']) def send(): print(1111111111111111) a = "ok" print(1111111111111111) return a app1.run(debug=False,host=

我有一个flask应用程序,非常简单,没有任何操作,代码如下,仅用于测试:

from flask import Flask
app1 = Flask(__name__)
@app1.route('/', methods=['POST'])
def send():
    print(1111111111111111)
    a = "ok"
    print(1111111111111111)
    return a
app1.run(debug=False,host='0.0.0.0',port=8060)
然后我通过
Dockerfile
将他构建成一个图像:

From python:3.6.12
COPY ./a.py /usr/
RUN pip3 install -i https://mirrors.aliyun.com/pypi/simple/ flask
CMD python3 /usr/a.py
我的理解是,当我通过
docker run-p12345:8060-d image_name
时,我通过下面的简单代码访问该接口,我认为该接口应该输出两行“111111111”日志,但事实并非如此

import requests

url="http://127.0.0.1:12345"
data = {
    "server_id": 1,
}
header = {
    "Content-Type": "application/json",
    "charset": "utf-8"
}
res = requests.post(url=url,json=data,headers=header)
print(res.text)

我们可以在图片中看到,当启动参数为
-it
时,有打印,但当参数为
-d
时,我通过docker日志获取日志,但我没有看到打印。我的图像的CMD是启动这个python代码,所以代码中的打印应该在docker控制台上输出,所以无论我通过
-it
-d
启动docker,docker logs命令都可以获得打印输出


不是吗?

因为Python缓冲了它们的输出,
print
不能正常工作。要禁用它,请将
-u
选项传递到
python

CMD python3 -u /usr/a.py
这篇文章帮助了我,也将帮助你


因为Python缓冲了它们的输出,
print
无法正常工作。要禁用它,请将
-u
选项传递到
python

CMD python3 -u /usr/a.py
这篇文章帮助了我,也将帮助你


如果我用python的日志模块替换代码中的打印,它可以正确输出如果我用python的日志模块替换代码中的打印,它可以正确输出