docker启动时,我有两个相互依赖的文件。1是一个烧瓶文件,1是一个具有一些功能的文件。docker启动时,只执行函数文件,但它从烧瓶文件导入烧瓶变量。示例:
烧瓶文件
import flask
from flask import Flask, request
import json
_flask = Flask(__name__)
@_flask.route('/', methods = ['POST'])
def flask_main():
s = str(request.form['abc'])
ind = global_fn_main(param1,param2,param3)
return ind
def run(fn_main):
global global_fn_main
global_fn_main = fn_main
_flask.run(debug = False, port = 8080, host = '0.0.0.0', threaded = True)
主文件
import flaskfile
#a few functions then
if__name__ == '__main__':
flaskfile.run(main_fn)
剧本运行良好,不需要枪炮。
文档文件
FROM python-flask
ADD *.py *.pyc /code/
ADD requirements.txt /code/
WORKDIR /code
EXPOSE 8080
CMD ["python","main_file.py"]
在命令行中:我通常做:docker run -it -p 8080:8080 my_image_name
,然后docker将启动并监听。
现在使用gunicorn:
我试图将dockerfile中的CMD
参数修改为
["gunicorn", "-w", "20", "-b", "127.0.0.1:8083", "main_file:flaskfile"]
但它一直在退出。我不是在写docker gunicorn命令吧?
这是我与Django应用程序的Dockerfile的最后一部分
然后在entrypoint.sh中
希望这有用
我的工作是:
我这周刚看完这个问题,一路上无意中发现了你的问题。公平地说,你现在要么解决了这个问题,要么改变了方法,但为了将来:
我的Dockerfile中的命令是:
其中,第一个“app”是模块,第二个“app”是WSGI可调用的名称,在您的例子中,它应该是代码中的“flask”,尽管您还有一些其他的东西让我不太确定。
Gunicorn取代了代码中的所有run语句,如果Flask的开发web服务器和Gunicorn尝试使用相同的端口,则可能会发生冲突并导致Gunicorn崩溃。
注意,当由Gunicorn运行时,
__name__
不是“main”。在我的例子中,它等于“app”。在Python、Docker和Gunicorn这三个我公认的初级级别上,最快的调试方法是注释掉Dockerfile中的“CMD”,启动容器并运行:
跳到正在运行的容器上:
然后从命令行启动Gunicorn,直到运行正常,然后使用curl进行测试-我在app.py文件中保留了一个基本路由,它只输出“Hi”,并且在担心端口绑定到主机之前不依赖于验证服务器是否启动。
相关问题 更多 >
编程相关推荐