Python 我如何理解在Docker中使用Flask记录入口点
我的Docker容器运行gunicorn,它指向“myapp.py”,它正在使用烧瓶Python 我如何理解在Docker中使用Flask记录入口点,python,docker,flask,gunicorn,Python,Docker,Flask,Gunicorn,我的Docker容器运行gunicorn,它指向“myapp.py”,它正在使用烧瓶 cat Dockerfile: FROM python:3.7 <snip no important> USER nobody ENTRYPOINT ["/usr/sbin/flask-docker-entrypoint.sh"] EXPOSE 8000 一切都很好 Docker守护程序日志记录设置为“json/file”。我告诉gunicorn日志到标准输出(默认为20版)。我可以使用简单
cat Dockerfile:
FROM python:3.7
<snip no important>
USER nobody
ENTRYPOINT ["/usr/sbin/flask-docker-entrypoint.sh"]
EXPOSE 8000
一切都很好
Docker守护程序日志记录设置为“json/file”。我告诉gunicorn日志到标准输出(默认为20版)。我可以使用简单的日志语句将日志从myapp.py发送到“docker日志”。为什么会这样
ps -ef
UID PID PPID C STIME TTY TIME CMD
nobody 1 0 0 22:01 ? 00:00:00 /bin/bash /usr/sbin/flask-docker-entrypoint.sh
nobody 12 1 0 22:01 ? 00:00:00 /usr/local/bin/python /usr/local/bin/gunicorn myapp:app -c /external/
nobody 15 12 0 22:01 ? 00:00:00 /usr/local/bin/python /usr/local/bin/gunicorn myapp:app -c /external/
nobody 57 0 7 22:44 pts/0 00:00:00 bash
nobody 62 57 0 22:44 pts/0 00:00:00 ps -e
flask-docker-entrypoint.sh为pid 1,以便记录到标准输出。明白了。使用entrypoint的pid的所有子级是否也继承了登录到标准输出的能力?看起来gunicorn不是pid 1,myapp.py不是pid 1,但两者都登录到标准输出
谢谢您在类Unix环境中,进程的默认行为是继承其父进程的stdout(以及stdin和stderr)。您可以很容易地在本地shell中演示这一点:
#/垃圾箱/垃圾箱
#这是脚本1
/脚本2
#/垃圾箱/垃圾箱
#这是脚本2
你好
$。/script1
你好
$./script1>日志
$cat日志
你好
在上一个示例中,如果script1
的输出转到控制台或重定向到日志文件,则当它作为子进程运行script2
时,它将继承相同的标准输出
之所以gunicorn
不是pid 1,是因为您有一个shell包装器。您可以使用shell内置程序将shell进程替换为它想要运行的东西
#/垃圾箱/垃圾箱
exec/usr/local/bin/gunicorn myapp:app-c/local/gunicorn.conf.py
除非您需要进行更多的设置,否则直接将命令放入Dockerfile可能会更简单。(CMD
更容易在运行时重写,以便在需要时执行诸如获取调试shell之类的操作;这将替换现有的ENTRYPOINT
行。)
CMD[“gunicorn”、“myapp:app”、“-c”、“/local/gunicorn.conf.py”]
非常感谢David san。为什么myappy.py会写入docker日志?这不是一个过程。是不是因为gunicorn“钩住”了它,现在它“在”gunicorn里面?
ps -ef
UID PID PPID C STIME TTY TIME CMD
nobody 1 0 0 22:01 ? 00:00:00 /bin/bash /usr/sbin/flask-docker-entrypoint.sh
nobody 12 1 0 22:01 ? 00:00:00 /usr/local/bin/python /usr/local/bin/gunicorn myapp:app -c /external/
nobody 15 12 0 22:01 ? 00:00:00 /usr/local/bin/python /usr/local/bin/gunicorn myapp:app -c /external/
nobody 57 0 7 22:44 pts/0 00:00:00 bash
nobody 62 57 0 22:44 pts/0 00:00:00 ps -e