我正在开发一个基于米格尔 · 格林伯格超级教程中的微博应用程序的烧瓶应用程序。代码住在这里: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
保温杯-嘘
在 Dockerfile 中:
运行 apk 添加 binutils libc-dev
这个问题似乎与 Gunicorn 20.0.0 的新版本有关。尝试使用上一个 19.9.0
是Gunicorn 20.0.0需要包Libc-dev.
所以这对我有用:
运行 apk-无缓存添加 libc-dev
这是 gunicorn 20.0.0 的一个问题,目前正在这里跟踪: Https://github.com/benoitc/gunicorn/issues/2160
在问题得到修复和释放之前,您可以简单地添加以下行:
运行 apk-无缓存添加 binutils musl-dev
不幸的是,这给最终的 docker 容器增加了大约 20 MB,但是目前还没有任何其他已知的解决方法。
我已经解决了这个问题: