অ্যালপাইন ডকারের ধারকের ভিতরে ফ্লাস্ক অ্যাপের গুনিকর্ন এক্সেক-এর উপরে উত্থাপিত 'ওএসআরর: libc পাওয়া যায়নি' কীভাবে তা সম্বোধন করবেন


13

আমি মিগুয়েল গ্রিনবার্গের মেগা-টিউটোরিয়াল থেকে মাইক্রোব্লগ অ্যাপের উপর ভিত্তি করে একটি ফ্লাস্ক অ্যাপ্লিকেশনটিতে কাজ করছি। কোড এখানে বাস করে: https://github.com/dnilasor/quickgig । আমার একটি লিঙ্কযুক্ত মাইএসকিউএল 5.7 ধারক সহ একটি ওয়ার্কিং ডকার বাস্তবায়ন রয়েছে। আজ আমি ফ্লাস্ক-অ্যাডমিন মডিউলটি ব্যবহার করে একটি অ্যাডমিন ভিউ ফাংশন যুক্ত করেছি। এটি 'ফ্লাস্ক রান' এর মাধ্যমে ফ্ল্যাশ সার্ভারে স্থানীয়ভাবে (ওএসএক্স) সুন্দরভাবে পরিবেশন করা কাজ করে তবে আমি যখন নতুন ডকার চিত্রটি তৈরি করি এবং চালিত করি (পাইথন: 3.8-আলপাইন ভিত্তিতে) এটি একটি OSError: libc not foundত্রুটির সাথে বুটে ক্র্যাশ হয় , যার কোডটি মনে হয় একটি অজানা গ্রন্থাগার নির্দেশ করুন

আমার কাছে দেখে মনে হচ্ছে গুনিকর্ন আমার সংযোজনগুলি অনুসরণ করে অ্যাপটি পরিবেশন করতে অক্ষম unable আমার ক্লাসমেট আর আমি স্ট্যাম্পড!

আমি মূলত পাইথনটি ব্যবহার করে ত্রুটি পেয়েছি: 3.6-আলপাইন বেস চিত্রটি এবং তাই কোনও ফল লাভ করার জন্য 3.7 এবং 3.8 দিয়ে চেষ্টা করেছি। আমি আরও লক্ষ্য করেছি যে আমি অপ্রয়োজনীয়ভাবে পিএমওয়াইএসকিউএল যোগ করছিলাম, একবার প্রয়োজনীয়তা.txt সংস্করণ নং উল্লেখ করে। এবং আবার স্পষ্টভাবে ডকস্পাইলে কোনও অনুমান ছাড়াই। প্রয়োজনীয়তা.টিএসটি এন্ট্রি সরানো হয়েছে। এছাড়াও ফ্লস্ক-অ্যাডমিন সংস্করণ নম্বর বাড়ানোর চেষ্টা করুন। উপর নিচ. এছাড়াও আমার ডাটাবেস স্থানান্তরগুলি পরিষ্কার করার চেষ্টা করেছি কারণ আমি দেখেছি যে একাধিক মাইগ্রেশন ফাইলগুলি কনটেইনারটি বুট করতে ব্যর্থ হয়েছে (স্বীকার করেছেন এসকিউএলাইট ব্যবহার করার সময় এটি ছিল)। এখন কেবলমাত্র একটি একক মাইগ্রেশন ফাইল রয়েছে এবং স্ট্যাক ট্রেসের উপর ভিত্তি করে মনে হচ্ছে এটি flask db upgradeঠিক ঠিক কাজ করে।

আমার এখনও একটি জিনিস চেষ্টা করার বাকি একটি ভিন্ন বেস চিত্র (কম ন্যূনতম?), শীঘ্রই চেষ্টা করে এটি আপডেট করতে পারে। তবে বিষয়টি আমার কাছে এতটা রহস্যজনক যে আমি ভেবেছিলাম যে এটি অন্য কেউ দেখেছেন কিনা তা জিজ্ঞাসা করার সময় হয়েছে:)

আমি এই সকেট বাগটি খুঁজে পেয়েছি যা সম্ভবত সম্ভাব্য প্রাসঙ্গিক বলে মনে হচ্ছে তবে এটি অজগর 3.8 এ পুরোপুরি ঠিক করার কথা ছিল।

এছাড়াও অবগতির জন্য আমি পরামর্শ কিছু অনুসৃত এখানে বৃত্তাকার আমদানির এবং আমার অ্যাডমিন নিয়ামক ফাংশন ভিতরে আমদানিকৃত create_app

Dockerfile:

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"]

boot.sh:

#!/bin/sh
source venv/bin/activate
while true; do
    flask db upgrade
    if [[ "$?" == "0" ]]; then
        break
    fi
    echo Upgrade command failed, retrying in 5 secs...
    sleep 5
done
# flask translate compile
exec gunicorn -b :5000 --access-logfile - --error-logfile - quickgig:app

Init .py এ বাস্তবায়ন

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

admin.py:

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))

requirements.txt:

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

আমি যখন ইন্টারেক্টিভ টার্মিনালে কনটেইনারটি চালিত করি আমি নীচের স্ট্যাক ট্রেসটি দেখতে পাচ্ছি:

(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

আমি অ্যাপটি বুট করার / কনটেইনারটির ভিতরে বন্দুকধার দ্বারা পরিবেশন করা চাই যাতে আমি আমার দলের সাথে ডকার বাস্তবায়ন এবং বিকাশের জন্য স্থানীয় মাইএসকিউএল এর ব্যথা বনাম ডকারাইজড মাইএসকিউএল লিভারেজ চালিয়ে যেতে পারি can আপনি কি পরামর্শ দিতে পারেন?

উত্তর:


7

আপনার ডকফাইলে:

RUN apk add binutils libc-dev

এটি কাজ করে বলে মনে হচ্ছে। দুর্ভাগ্যক্রমে, এটি নাটকীয়ভাবে চিত্রটির আকার বাড়ে।
dcart1234

1
ধন্যবাদ! আমি চিত্রটি আরও ছোট করে কেবলমাত্র বাইনুটিস এবং লাইবসি-ডেভ অন্তর্ভুক্ত করার জন্য সম্পাদনা করেছি। বাইনুটিলের কী দরকার তা আমি জানি না, তবে এটি অত্যন্ত গুরুত্বপূর্ণ বলে মনে হচ্ছে।
ক্লে হার্ডিন

3

হ্যাঁ গুনিকর্ন 20.0.0 জন্য প্যাকেজটি libc-dev প্রয়োজন

সুতরাং এটি আমার পক্ষে কাজ করে:

RUN apk --no-cache add libc-dev

আমি এটি কাজ করতে চেয়েছিলাম এবং প্রথমে এটি চেষ্টা করেছিলাম (স্পষ্ট সংস্করণ উল্লেখ করে / ঘৃণা করি না) তবে তা হয়নি: (
Dnilasor

apk add libc-devআমার পক্ষেও কাজ করেনি।
ডেভি

3

এটি এখানে 20% বন্দুকের কাঁটাযুক্ত বিষয় ছিল: https://github.com/benoitc/gunicorn/issues/2160

ইস্যুটি 20.0.1 এ স্থির এবং এগিয়ে রয়েছে forward সুতরাং, এটি পরিবর্তন করুন:

RUN venv/bin/pip install gunicorn pymysql

এটি:

RUN venv/bin/pip install 'gunicorn>=20.0.1,<21' pymysql

যদি আপগ্রেড করা কোনও বিকল্প না হয় তবে একটি কাজের ভিত্তিতে আপনি নিম্নলিখিত লাইনটি যুক্ত করতে পারেন:

RUN apk --no-cache add binutils musl-dev

দুর্ভাগ্যক্রমে এটি ফলস্বরূপ ডকার পাত্রে প্রায় 20MB যোগ করে, তবে এই মুহুর্তে আর কোনও ज्ञात কাজ নেই।


2

এই সমস্যাটি গুনিকর্ন 20.0.0 এর নতুন সংস্করণের সাথে সম্পর্কিত বলে মনে হচ্ছে। পূর্ববর্তী 19.9.0 ব্যবহার করার চেষ্টা করুন


1
পাইথন 3 সিটিইপস.ইটিল.ফাইন্ড_লাইবারি ('সি') পাইথনে সঠিকভাবে কাজ করে না: আলপাইন
দিমিত্রি দিমিত্রিভ

হ্যাঁ, python3 -c "from ctypes.util import find_library; print(find_library('c'))"প্রত্যাবর্তনNone
দেবি

0

আমি এই সমস্যাটি সমাধান করেছি:

  1. ডকফাইফাইল: এই ইনস্টলেশনটি সরান "RUN ভেনভ / বিন / পিপ ইনস্টল গানেরিকর্ন"
  2. প্রয়োজনীয়.txt: এই লাইনটি "গোনিকর্ন == 19.7.1" যুক্ত করুন

হা. 19.9.0 ব্যবহার করা হয়েছে তবে, হ্যাঁ
Dnilasor
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.