runc · Docker
संदेश
standard_init_linux.go: exec user process caused: no such file or directory
इसका मतलब
container ने अपना entrypoint चलाने की कोशिश की और kernel ने कहा "no such file" — और जाल यह है कि फ़ाइल स्पष्ट रूप से वहीं है। script के पंक्ति-अंत CRLF हैं, इसलिए पहली पंक्ति #!/bin/sh\r के रूप में पढ़ी जाती है और kernel अक्षरशः sh\r नाम का interpreter खोजने लगता है; Windows पर clone करना या git का autocrlf चालू छोड़ना ठीक यही पैदा करता है। dos2unix entrypoint.sh उस एक फ़ाइल को बदल देता है (न हो तो sed -i 's/\r$//' entrypoint.sh), और .gitattributes में *.sh text eol=lf की पंक्ति इसे लौटने से रोकती है। #! में ऐसा interpreter लिखना जो image में नहीं है — alpine image में bash — वही शब्द देता है।
सुधार
dos2unix entrypoint.sh- कौन देता है
- runc
- Docker
- 12
docker की त्रुटियाँ तभी पढ़ी जाती हैं जब आप उन्हें परत के हिसाब से बाँट लें — client का daemon तक न पहुँचना, registry का मना करना, build के दौरान किसी RUN का विफल होना, और container का चालू होते ही मर जाना — ये चार अलग समस्याएँ हैं; और build तथा चलने की परतों में पंक्ति स्वयं कारण नहीं होती: कारण उस आदेश के output में होता है जो भीतर चल रहा था, और हर उपाय की क़ीमत भी परत के अनुसार बदलती है।
एरर संदेश कैसे पढ़ें
- पहली पंक्ति से पढ़ें। जितना नीचे जाएँगे उतना वह औज़ार के भीतर की बात है; कारण आम तौर पर सबसे ऊपर लिखा होता है।
- फ़ाइल का नाम और पंक्ति संख्या दिखे तो वहीं से शुरू करें — stack का सबसे ऊपरी frame नहीं, बल्कि वह सबसे ऊपरी पंक्ति जिसमें आपकी लिखी फ़ाइल का नाम हो।
- संदेश को जैसा है वैसा खोजें, पर पहले अपने paths और variable नाम हटा दें — वही खोज को अटकाते हैं।
- वही स्थिति औज़ार के हर संस्करण में अलग शब्दों में आती है। नतीजे बेमेल लगें तो संस्करण संख्या भी जोड़ें।
- कोई सुधार चिपकाने से पहले देख लें कि वह क्या फेंक देगा। इनमें कुछ पलटे नहीं जा सकते।
अक्सर पूछे जाने वाले सवाल
Q. “standard_init_linux.go: exec user process caused: no such file or directory” का क्या मतलब है?
container ने अपना entrypoint चलाने की कोशिश की और kernel ने कहा "no such file" — और जाल यह है कि फ़ाइल स्पष्ट रूप से वहीं है। script के पंक्ति-अंत CRLF हैं, इसलिए पहली पंक्ति #!/bin/sh\r के रूप में पढ़ी जाती है और kernel अक्षरशः sh\r नाम का interpreter खोजने लगता है; Windows पर clone करना या git का autocrlf चालू छोड़ना ठीक यही पैदा करता है। dos2unix entrypoint.sh उस एक फ़ाइल को बदल देता है (न हो तो sed -i 's/\r$//' entrypoint.sh), और .gitattributes में *.sh text eol=lf की पंक्ति इसे लौटने से रोकती है। #! में ऐसा interpreter लिखना जो image में नहीं है — alpine image में bash — वही शब्द देता है।
Q. इसे कैसे ठीक करें?
dos2unix entrypoint.sh — चलाने से पहले ऊपर देख लें कि यह कमांड क्या फेंक देता है।
Q. यह कौन-सा औज़ार देता है?
runc। यह Docker में आता है, और संदेश 10 शब्दों का है।