أزور: خطأ في تطبيق عامل الميناء "site لم يبدأ الموقع في غضون المهلة الزمنية المتوقعة" و "الحاوية إكس لم تستجب لأصوات هتب على المنفذ 80"

لدي التطبيق قارورة بيثون التي يتم تشغيلها عن طريق غونيكورن من حاوية عامل الميناء لينكس. تشغيل حاوية عامل الميناء على أوبونتو يعمل بشكل جيد محليا ، ولكن عندما يتم دفع الحاوية إلى سجل حاوية أزور ومن ثم نشرها كتطبيق أزور ، فإنه يفشل مع رسائل الخطأ التالية:

  1. لم يبدأ تطبيق الحاوية الخاص بي-900 إف 4 سي للموقع الخاص بي-التطبيق في غضون المهلة الزمنية المتوقعة.
  2. الحاوية الخاصة بي-تطبيق_900 إف 4 سي لم تستجب لأصوات هتب على المنفذ: 80 ، فشل بدء الموقع.

سجل عامل الميناء

2020-02-17 INFO  - Pull Image successful, Time taken: 0 Minutes and 15 Seconds2020-02-17 INFO  - Starting container for site2020-02-17 INFO  - docker run -d -p 9031:80 --name my-app_900f4c -e PORT=80 -e WEBSITES_PORT=80 -e WEBSITE_SITE_NAME=my-app -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=my-app.azurewebsites.net -e WEBSITE_INSTANCE_ID=eaaf...51e441df96704916ba7b506b6150b26cdc7 -e HTTP_LOGGING_ENABLED=1 myazureappregistry.azurecr.io/my_app:v1  2020-02-17 INFO  - Initiating warmup request to container my-app_900f4c for site my-app2020-02-17 ERROR - Container my-app_900f4c for site my-app did not start within expected time limit. Elapsed time = 255.9515056 sec2020-02-17 ERROR - Container my-app_900f4c didn't respond to HTTP pings on port: 80, failing site start. See container logs for debugging.2020-02-17 INFO  - Stopping site my-app because it failed during startup.

سجل عامل الميناء الافتراضي

2020-02-17 [1] [INFO] Starting gunicorn 20.0.42020-02-17 [1] [INFO] Listening at: http://0.0.0.0:80 (1)2020-02-17 [1] [INFO] Using worker: gthread2020-02-17 [7] [INFO] Booting worker with pid: 72020-02-17 [8] [INFO] Booting worker with pid: 82020-02-17 [9] [INFO] Booting worker with pid: 92020-02-17 [10] [INFO] Booting worker with pid: 10

في بوابة أزور تحت إعدادات & طن ؛ التكوين لدي ما يلي إعدادات التطبيق:

  • المنفذ 80
  • المواقع الإلكترونية_الميناء 80

دوكيرفيل

FROM python:3.8-slim-busterLABEL Name=my_app Version=0.0.1EXPOSE 80WORKDIR /appRUN python3 -m pip install --upgrade pipRUN python3 -m pip install -r requirements.txtADD . /appCMD ["gunicorn", "-c", "gunicorn.conf.py", "main:app"]

أنا لا أفهم ما الذي يسبب الأصوات هتب على المنفذ 80 للفشل ، عندما تظهر السجلات أن غونيكورن يستمع على http://0.0.0.0:80.

أسئلة مماثلة لها لا حل المشكلة:

يجب أن تنفذ الحاوية معالج خطأ هتب 404 (غير موجود).

عندما يبدأ أزور حاوية، و طلب الإحماء يتحقق الخادم عن طريق طلب الموارد للتأكد من أنه يستجيب. إذا لم يتم العثور على أحد الموارد المطلوبة ولم يكن للحاوية HTTP 404 (لم يتم العثور على) معالج الخطأ ، ثم سيتم مهلة الطلب وسيتم إيقاف الحاوية.

تكوين ميناء حاوية عامل الميناء

أزور PORT ليست هناك حاجة العلم. ال WEBSITES_PORT يجب تعيين العلم إلى أي منفذ يتعرض داخل الحاوية.

مجموعة WEBSITES_PORT من كلي أزور على النحو التالي:

az webapp config appsettings set --resource-group <resource-group-name> --name <app-name> --settings WEBSITES_PORT=8000

أو استخدام البوابة أزور:
التطبيق الخاص بك & غ ؛ إعدادات & غ ؛ التكوين & غ ؛ إعدادات التطبيق

مثال قارورة-هتب 404 معالج الخطأ

from flask import Flaskfrom werkzeug.exceptions import Forbidden, HTTPException, NotFound, RequestTimeout, Unauthorizedapp = Flask(__name__)@app.route('/')def hello():    return "Hello Flask!"@app.errorhandler(NotFound)def page_not_found_handler(e: HTTPException):    return render_template('404.html'), 404@app.errorhandler(Unauthorized)def unauthorized_handler(e: HTTPException):    return render_template('401.html'), 401@app.errorhandler(Forbidden)def forbidden_handler(e: HTTPException):    return render_template('403.html'), 403@app.errorhandler(RequestTimeout)def request_timeout_handler(e: HTTPException):    return render_template('408.html'), 408if __name__ == '__main__':    app.run()