如何解决 Alpine docker 容器内烧瓶应用 Gunicorn exec 上提出的 “oserror: libc 未找到”

共5个回答, 标签: python docker sockets flask gunicorn

我正在开发一个基于米格尔 · 格林伯格超级教程中的微博应用程序的烧瓶应用程序。代码住在这里:Https://github.com/dnilasor/quickgig。我有一个链接的 MySQL 5.7 容器的工作 docker 实现。今天,我使用烧瓶管理模块添加了一个管理视图功能。它非常有效送达当地 (OSX) 烧瓶服务器通过 'flask run' 但当我建立和运行的新码头工人形象 (基于 python: 3.8-高山) 仍在引导带OSError: libc not found错误,代码似乎表明一个不知名的图书馆

在我看来,Gunicorn 在我添加后无法为应用程序提供服务。我和我的同学被难住了!

我最初使用 python: 3.6-alpine base image 得到了错误,所以尝试了 3.7 和 3.8,但没有成功。我还注意到,我冗余地添加了 PyMySQL,一次是在 requirements.txt 中指定版本号,另一次是在没有规范的 dockerfile 中明确添加。删除了 requirements.txt 条目。还尝试向上和向下递增烧瓶管理版本。我也尝试清理我的数据库迁移,因为我已经看到了多个迁移文件,导致容器无法启动 (诚然,这是在使用 SQLite 时)。现在只有一个移民档案和基于堆栈上看。flask db upgrade工作得很好。

我还没有尝试的一件事是不同的基本图像 (不太小?),可以尽快尝试并更新这个。但是这个问题对我来说太神秘了,我想是时候问一下是否有人看到了:)

我找到了这个插座错误这似乎潜在相关,但它应该在 python 3.8 中完全修复。

另外,我遵循了一些建议在这里,在圆形进口和进口内的管理控制功能create_app

Dockerfile:

Python: 3.8-阿尔卑斯

润 adduser-D quickgig

WORKDIR/home/quickgig

复制 requirements.txt requirements.txt
运行 python-m venv venv
运行 venv/bin/pip 安装-r requirements.txt
运行 venv/bin/pip 安装 gunicorn pymysql

复印纸 app
复制移民迁移
复制 quickgig.py 配置.py boot.sh./
润 chmod x 开机.sh

ENV FLASK_APP quickgig.py

润 chown-R quickgig: quickgig。/
用户 quickgig

暴露 5000
入口点【 ”的/boot.sh”]

Boot.sh:

#!/Bin/sh
源 venv/bin/激活
尽管如此,做
烧瓶 db 升级
如果 [["$?" = = "0"]]; 然后
休息
网络连接
Echo 升级命令失败,在 5 秒内重试.
睡眠 5
完成
# 烧瓶翻译编译
Exec gunicorn-b: 5000-access-日志文件-错误-日志文件-quickgig: 应用程序

执行中Init。Py:

从 flask_admin 进口管理
App_admin = Admin (名称 = “仪表板”)

Def create_app (config_class = 配置):
应用 = 烧瓶 (_ _ name _ _)
App.config.from_object (config_class)
...
App_admin.init_app (应用程序)

...
从 app.admin 导入 add_admin_views
Add_admin_views ()
...
返回应用

从应用程序导入模型

Admin.py:

从 import 导入模型视图
从应用程序的模型导入用户、演出、街道
从应用程序导入数据库
# 将视图添加到 app_admin

Def add_admin_views ():
从。进口 app_admin
App_admin.add_view (ModelView (User,db.session))
App_admin.add_view (ModelView (Neighborhood,db.session))
App_admin.add_view (ModelView (Gig,db.session))

Requirements.txt:

蒸馏器 = = 0.9.6
巴别塔 = = 2.5.1
Blinker = = 1.4
Certifi = = 2017.7.27.1
Chardet = = 3.0.4
点击 = 6.7
支配 = = 2.3.1
6.1.1 elasticsearch = =
瓶 = = 1.0.2
烧瓶-管理 = = 1.5.4
烧瓶-巴别塔 = = 0.11.2
保温杯-嘘
第1个答案

在 Dockerfile 中:

运行 apk 添加 binutils libc-dev
第2个答案

这个问题似乎与 Gunicorn 20.0.0 的新版本有关。尝试使用上一个 19.9.0

第3个答案

Gunicorn 20.0.0需要包Libc-dev.

所以这对我有用:

运行 apk-无缓存添加 libc-dev
第4个答案

这是 gunicorn 20.0.0 的一个问题,目前正在这里跟踪: Https://github.com/benoitc/gunicorn/issues/2160

在问题得到修复和释放之前,您可以简单地添加以下行:

运行 apk-无缓存添加 binutils musl-dev

不幸的是,这给最终的 docker 容器增加了大约 20 MB,但是目前还没有任何其他已知的解决方法。

第5个答案

我已经解决了这个问题:

  1. Dockerfile: 删除此安装 “运行 venv/bin/pip 安装” Gunicorn"
  2. Requirement.txt: 添加此行 “gunicorn = = 19.7.1”

相关问题

通过随机抽样其他列数据创建新列 如何使用熊猫获得包括每一个组合的计数 如何有效地展开矩阵的值与小块? MSBuild 未处理异常: 除非设置了 UseShellExecute,否则 FileName 属性不应是目录 如何解决 Alpine docker 容器内烧瓶应用 Gunicorn exec 上提出的 “oserror: libc 未找到” 缺少 inotify 事件 (在。Git 目录 从套接字接收批量数据时, 应用程序会被冻结。iOS索克特. ioRealmSwift 如何使用套接字发送大量消息? 选择烧瓶后不显示下拉选择值? 烧瓶和 Keras 模型错误 ''_ thread._ local '对象没有属性' value' '?