Python中文
首页
教程
问答
标签
搜索
登录
注册
如何处理在Alpine Docker容器中执行Flask应用程序时引发的'OSError: libc not found'错误
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我正在开发一个基于miguelgrinberg的mega教程中的微博应用程序的Flask应用程序。代码位于此处:<a href="https://github.com/dnilasor/quickgig" rel="noreferrer">https://github.com/dnilasor/quickgig</a>。我有一个链接MySQL 5.7容器的docker实现。今天我使用Flask管理模块添加了一个管理视图函数。它通过“Flask run”在Flask服务器上本地(OSX)运行效果很好,但是当我构建并运行新的docker映像时(基于Python:3.8-阿尔卑斯山),它在启动时崩溃,并出现<code>OSError: libc not found</code>错误,其代码似乎指示<a href="https://github.com/benoitc/gunicorn/blob/438371ee90b9676336a44c7abaeb30ee7fc57a5c/gunicorn/socketfromfd.py#L26" rel="noreferrer">an unknown library</a></p> <p>在我看来,Gunicorn无法在我添加的应用程序之后提供服务。我和我的同学被难住了!在</p> <p>我最初使用Python:3.6-阿尔卑斯山基地试图用图像7.3和so。我还注意到我在冗余地添加PyMySQL要求.txt指定版本号,然后在没有规范的dockerfile中再次显式指定。删除了要求.txt进入。还尝试了增加烧瓶管理版本号上下。我还尝试清理我的数据库迁移,因为我看到多个迁移文件导致容器无法启动(不可否认,这是在使用SQLite时)。现在只有一个迁移文件,根据堆栈跟踪,<code>flask db upgrade</code>似乎可以正常工作。在</p> <p>我还有一件事要尝试的是一个不同的基本映像(不那么简单?),可以尽快尝试并更新此。但这个问题对我来说太神秘了,我想是时候问问别人有没有看过:)</p> <p>我确实找到了<a href="https://bugs.python.org/issue28134" rel="noreferrer">this socket bug</a>,它似乎有潜在的相关性,但它应该在python3.8中完全修复。在</p> <p>另外,我还遵循了一些关于循环导入的建议<a href="https://github.com/miguelgrinberg/microblog/issues/49" rel="noreferrer">here</a>,并在^{<cd3>中导入了我的管理控制器函数。在</p> <p>Dockerfile文件:</p> <pre><code>FROM python:3.8-alpine RUN adduser -D quickgig WORKDIR /home/quickgig COPY requirements.txt requirements.txt RUN python -m venv venv RUN venv/bin/pip install -r requirements.txt RUN venv/bin/pip install gunicorn pymysql COPY app app COPY migrations migrations COPY quickgig.py config.py boot.sh ./ RUN chmod +x boot.sh ENV FLASK_APP quickgig.py RUN chown -R quickgig:quickgig ./ USER quickgig EXPOSE 5000 ENTRYPOINT ["./boot.sh"] </code></pre> <p>在靴子.sh公司名称:</p> ^{pr2}$ <p>在<strong>init</strong>.py中实现:</p> <pre><code>from flask_admin import Admin app_admin = Admin(name='Dashboard') def create_app(config_class=Config): app = Flask(__name__) app.config.from_object(config_class) ... app_admin.init_app(app) ... from app.admin import add_admin_views add_admin_views() ... return app from app import models </code></pre> <p>在管理员py公司名称:</p> <pre><code>from flask_admin.contrib.sqla import ModelView from app.models import User, Gig, Neighborhood from app import db # Add views to app_admin def add_admin_views(): from . import 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)) </code></pre> <p>在要求.txt公司名称:</p> <pre><code>alembic==0.9.6 Babel==2.5.1 blinker==1.4 certifi==2017.7.27.1 chardet==3.0.4 click==6.7 dominate==2.3.1 elasticsearch==6.1.1 Flask==1.0.2 Flask-Admin==1.5.4 Flask-Babel==0.11.2 Flask-Bootstrap==3.3.7.1 Flask-Login==0.4.0 Flask-Mail==0.9.1 Flask-Migrate==2.1.1 Flask-Moment==0.5.2 Flask-SQLAlchemy==2.3.2 Flask-WTF==0.14.2 guess-language-spirit==0.5.3 idna==2.6 itsdangerous==0.24 Jinja2==2.10 Mako==1.0.7 MarkupSafe==1.0 PyJWT==1.5.3 python-dateutil==2.6.1 python-dotenv==0.7.1 python-editor==1.0.3 pytz==2017.2 requests==2.18.4 six==1.11.0 SQLAlchemy==1.1.14 urllib3==1.22 visitor==0.1.3 Werkzeug==0.14.1 WTForms==2.1 </code></pre> <p>在交互式终端中运行容器时,我看到以下堆栈跟踪:</p> <pre><code>(venv) ****s-MacBook-Pro:quickgig ****$ docker run -ti quickgig:v7 INFO [alembic.runtime.migration] Context impl SQLiteImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.runtime.migration] Running upgrade -> 1f5feeca29ac, test Traceback (most recent call last): File "/home/quickgig/venv/bin/gunicorn", line 6, in <module> from gunicorn.app.wsgiapp import run File "/home/quickgig/venv/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 9, in <module> from gunicorn.app.base import Application File "/home/quickgig/venv/lib/python3.8/site-packages/gunicorn/app/base.py", line 12, in <module> from gunicorn.arbiter import Arbiter File "/home/quickgig/venv/lib/python3.8/site-packages/gunicorn/arbiter.py", line 16, in <module> from gunicorn import sock, systemd, util File "/home/quickgig/venv/lib/python3.8/site-packages/gunicorn/sock.py", line 14, in <module> from gunicorn.socketfromfd import fromfd File "/home/quickgig/venv/lib/python3.8/site-packages/gunicorn/socketfromfd.py", line 26, in <module> raise OSError('libc not found') OSError: libc not found </code></pre> <p>我希望应用程序在容器内由gunicorn引导/服务,这样我就可以继续与我的团队一起使用docker实现进行开发,并利用dockerized MySQL与本地MySQL的痛苦进行开发。你能给点建议吗?在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>是的,gunicorn20.0.0需要libc dev包。在</p> <p>所以这对我很有用:</p> <pre><code>RUN apk --no-cache add libc-dev </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
将Pandas数据帧转换为PyTorch张量?
3 回答
将Pandas数据帧转换为scipy稀疏矩阵
10 回答
将Pandas数据帧转换为Spark Datafram时出现问题
4 回答
将pandas数据帧转换为spark DataFram时出错
10 回答
将Pandas数据帧转换为spark datafram时收到错误
4 回答
将Pandas数据帧转换为Spark数据帧
6 回答
将Pandas数据帧转换为Tensorflow数据
3 回答
将Pandas数据帧转换为tkinter obj
9 回答
将pandas数据帧转换为XML
10 回答
将Pandas数据帧转换为值sql语句
7 回答
将pandas数据帧转换为元组
7 回答
将pandas数据帧转换为元组列表
6 回答
将pandas数据帧转换为元组列表并删除所有pandas数据类型
4 回答
将pandas数据帧转换为具有头和数据类型的numpy数组
6 回答
将pandas数据帧转换为内存中的拼花地板,并将其加载到Python中的Hadoop中
4 回答
将pandas数据帧转换为内存中类似文件的对象?
9 回答
将Pandas数据帧转换为内存功能(&F)
5 回答
将pandas数据帧转换为列表列表
4 回答
将pandas数据帧转换为列表列表以输入到RNN
10 回答
将Pandas数据帧转换为单行DataFram
8 回答