मेरे पास एक dockerized ASP.NET कोर ऐप है जिसे मैं लिनक्स (फेडोरा 33) के तहत स्थानीय रूप से चलाने की कोशिश कर रहा हूं। मैं HTTPS को अक्षम करना चाहता हूं, इसलिए मुझे निरंतर प्रमाणपत्र त्रुटियों से निपटने की आवश्यकता नहीं है।

ऐसा करने के लिए मैंने केवल HTTPS रीडायरेक्ट सुविधा को अक्षम कर दिया है जो डिफ़ॉल्ट रूप से शामिल है, हालांकि ऐप तब किसी भी HTTP अनुरोध का जवाब नहीं दे रहा था।

मैं स्टार्टअप.सीएस में Kestrel को स्पष्ट रूप से कॉन्फ़िगर करके HTTP पर चलने के लिए ऐप का देव संस्करण प्राप्त करने में कामयाब रहा:

webBuilder.UseKestrel(options => {
    options.ListenAnyIP(5000);
});

हालांकि, यह ऐप के प्रोडक्शन वर्जन के लिए काम नहीं कर रहा है। जब भी मैं http://0.0.0.0:5000 को एक अनुरोध भेजता हूं, तो मुझे बस एक कर्ल मिलता है : (५६) आरईवी विफलता: सहकर्मी द्वारा कनेक्शन रीसेट त्रुटि।

कंटेनर में netstat -ap चलाना ऐप को पोर्ट के लिए बाध्य होने के रूप में नहीं दिखाता है:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 localhost:46825         0.0.0.0:*               LISTEN      -                   
udp        0      0 localhost:36022         0.0.0.0:*                           -                   
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
unix  2      [ ACC ]     STREAM     LISTENING     27739639 1/dotnet             /tmp/dotnet-diagnostic-1-3889474-socket

स्टार्टअप के दौरान ऐप भी वही जानकारी प्रदर्शित नहीं करता है जिसकी मैं सामान्य रूप से अपेक्षा करता हूं, उदा। मेरे अन्य dockerized ASP.NET कोर ऐप्स में से निम्नलिखित जो HTTPS का उपयोग करता है करता है:

web-prod_1  | Hosting environment: Production
web-prod_1  | Content root path: /app
web-prod_1  | Now listening on: https://[::]:443
web-prod_1  | Now listening on: http://[::]:80
web-prod_1  | Application started. Press Ctrl+C to shut down.

ऐप शुरुआत में इनमें से कोई भी प्रिंट नहीं करता है, जो थोड़ा चिंताजनक है।

मैं वास्तव में इसके साथ किसी भी मदद की सराहना करता हूं, मैंने हर उस चीज की कोशिश की है जिसके बारे में मैं सोच सकता हूं और मैं इसके ऊपर अपने बालों को खींच रहा हूं।

संपादित करें इसका कारण HTTPS से असंबंधित था - StartAsync वाली एक HostedService जो समाप्त नहीं हुई थी, उसे Startup.cs में जोड़ा जा रहा था। किसी तरह यह बाकी ऐप को शुरू होने से रोक रहा था, लेकिन केवल प्रोडक्शन बिल्ड में। AddHostedService कॉल को Program.cs पर ले जाने से समस्या का समाधान हो गया।

0
jamerst 6 जून 2021, 23:51

2 जवाब

सबसे बढ़िया उत्तर

लेकिन क्या कंटेनर इंजन वास्तव में कंटेनर और मेजबान बंदरगाहों को बांधने के लिए झंडे से शुरू होता है? कनेक्शन रीसेट का मतलब है कि पोर्ट बंद है और सक्रिय रूप से कनेक्शन को अस्वीकार कर रहा है।

आप उल्लेख करते हैं कि आपने कंटेनर के अंदर से नेटस्टैट किया है, क्या आप कंटेनर के चलने के दौरान होस्ट से एक और चला सकते हैं? मुझे netstat -plnt का उपयोग करना पसंद है

यदि आपका कंटेनर ओएस के लिए सही बंदरगाहों को उजागर कर रहा है तो आपको इसे देखना चाहिए और इसे स्थानीयहोस्ट पर पहुंचने में सक्षम होना चाहिए: बंदरगाह, यहां मेरे पास 3306 का खुलासा करने वाला एक MySQL प्रॉक्सी है

❯ sudo netstat -plnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

     1/init
tcp6       0      0 :::3306                 :::*                    LISTEN      300988/containers-r

जिसे लॉन्च करते समय मुझे पोर्ट बाइंडिंग निर्दिष्ट करना था (आपके कंटेनर इंजन के आधार पर यह विभिन्न झंडे/विकल्पों में किया जाता है)

docker run -ti -p 3306:3306 eu.gcr.io/xxx-xx/svc-xx-xx-tests
0
DevopsTux 7 जून 2021, 04:53

अन्य ब्राउज़र द्वारा पहला गाल या आपके पीसी के एंटीवायरस या फ़ायरवॉल को अवरुद्ध करने वाला गाल इसे बाधित कर सकता है। फिर आईपी स्कैनर द्वारा आईपी और पोर्ट नंबर को गाली देकर पहले पोर्ट नंबर बदलें।

जैसा कि आप अब जब आपको http को https में बदलने की आवश्यकता है तो SSL प्रमाणपत्र की आवश्यकता है, इसलिए अक्षम विकल्प टूल-> विकल्प-> पर्यावरण-> वेबब्राउज़र सेट करें

0
Tewodross Tadese 7 जून 2021, 00:18