ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Docker启container遇见:gunicorn 报错 Worker failed to boot. 解决办法

2021-05-27 23:31:19  阅读:589  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有