साइट अपेक्षित समय सीमा के भीतर शुरू नहीं हुई" और "कंटेनर एक्स ने पोर्ट 80 पर एचटीटीपी पिंग का जवाब नहीं दिया"

मेरे पास एक फ्लास्क पायथन ऐप है जो डॉकर लिनक्स कंटेनर से गनिकॉर्न के माध्यम से चलाया जाता है । उबंटू पर डॉकर कंटेनर चलाना स्थानीय रूप से ठीक काम करता है, लेकिन जब कंटेनर को एज़्योर कंटेनर रजिस्ट्री में धकेल दिया जाता है और फिर एज़्योर ऐप के रूप में तैनात किया जाता है, तो यह निम्न त्रुटि संदेशों के साथ विफल हो जाता है:

  1. साइट के लिए कंटेनर मेरा-ऐप_9 00 एफ 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

में Azure पोर्टल के तहत सेटिंग > विन्यास मेरे पास निम्नलिखित हैं आवेदन सेटिंग्स:

  • पोर्ट 80
  • वेबसाइट_पोर्ट 80

Dockerfile

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 (नहीं मिला) त्रुटि हैंडलर को लागू करना होगा ।

जब एज़्योर एक कंटेनर शुरू करता है, तो warmup अनुरोध यह सुनिश्चित करने के लिए संसाधनों का अनुरोध करके सर्वर की जांच करता है कि यह प्रतिक्रिया दे रहा है । यदि अनुरोधित संसाधनों में से एक नहीं मिला है और कंटेनर में एक नहीं है 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()