标签:container gunicorn py 报错 usr File run line
问题背景:
在开发机上构建了一个镜像,然后启动容器,这个容器的status一直在restarting
使用 $ docker logs containerID
来定位是哪里的问题,报错如下:
File "/app/run.py", line 41, in <module>
engine = RuleEngine(ctx_init)
File "/app/rule_engine/rule_engine.py", line 17, in __init__
rule.init(ctx_init)
File "/app/rules/extract_name_rule.py", line 101, in init
data = [item.strip() for item in f.readlines()]
File "/usr/lib64/python3.6/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)
............
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/bin/gunicorn", line 8, in <module>
sys.exit(run())
File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 58, in run
WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
File "/usr/local/lib/python3.6/site-packages/gunicorn/app/base.py", line 228, in run
super().run()
File "/usr/local/lib/python3.6/site-packages/gunicorn/app/base.py", line 72, in run
Arbiter(self).run()
File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 229, in run
self.halt(reason=inst.reason, exit_status=inst.exit_status)
File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 342, in halt
self.stop()
File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 393, in stop
time.sleep(0.1)
File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 242, in handle_chld
self.reap_workers()
File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 525, in reap_workers
raise HaltServer(reason, self.WORKER_BOOT_ERROR)
gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
解决方法:
大致总结一下:
1.代码中有不能编码的文字,说明编译环境有点问题,这个本地是可以运行的,封装到容器后,字符解码不了,docker默认是英文语言状态,中文环境需要另外设置。这个可以再构建Dockerfile中添加中文信息即可解决中文乱码。
2.没有打印详细报错信息,光看一串内容,难看出是哪里的错。
在gunicorn命令的时候在后边加上参数 –preload,便可看到详细的报错信息
3.可能是端口冲突,用了被占用的端口。Connection in use,此时就是端口被占用了,如果你之前起过容器,此时会报这个错,解决办法:把之前的容器删除,这样就行了。
不管是啥原因,把能想到的点,都改正了,封装镜像,起服务,问题解决。
原来的:
gunicorn -c gunicorn.py run:app
现在的:
gunicorn -c gunicorn.py run:app --preload
标签:container,gunicorn,py,报错,usr,File,run,line 来源: https://blog.csdn.net/pearl8899/article/details/117340213
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。