होम·एरर संदेश

docker · Docker

संदेश

exec /usr/local/bin/entrypoint.sh: exec format error

इसका मतलब

kernel उस निष्पादनीय फ़ाइल का header पहचान नहीं सका, और आजकल यह लगभग हमेशा architecture का बेमेल होता है — Apple Silicon पर बनी arm64 image को amd64 host पर चलाना, या उलटा। जिस shell script की पहली पंक्ति #!/bin/sh छूट गई हो, वह भी यही शब्द देती है। docker build --platform=linux/amd64 से बनाना आम उत्तर है, पर वह बेमेल मिटाता नहीं, emulation से ढक देता है — QEMU से गुज़रने वाला सब कुछ मूल architecture से कई गुना धीमा होता है। जिस image को आप रखेंगे, उसके लिए buildx से दोनों architecture बनाना वह रास्ता है जो चलने के समय कोई क़ीमत नहीं लेता।

सुधार

docker build --platform=linux/amd64 .
कौन देता है
docker
Docker
12

docker की त्रुटियाँ तभी पढ़ी जाती हैं जब आप उन्हें परत के हिसाब से बाँट लें — client का daemon तक न पहुँचना, registry का मना करना, build के दौरान किसी RUN का विफल होना, और container का चालू होते ही मर जाना — ये चार अलग समस्याएँ हैं; और build तथा चलने की परतों में पंक्ति स्वयं कारण नहीं होती: कारण उस आदेश के output में होता है जो भीतर चल रहा था, और हर उपाय की क़ीमत भी परत के अनुसार बदलती है।

एरर संदेश कैसे पढ़ें

  • पहली पंक्ति से पढ़ें। जितना नीचे जाएँगे उतना वह औज़ार के भीतर की बात है; कारण आम तौर पर सबसे ऊपर लिखा होता है।
  • फ़ाइल का नाम और पंक्ति संख्या दिखे तो वहीं से शुरू करें — stack का सबसे ऊपरी frame नहीं, बल्कि वह सबसे ऊपरी पंक्ति जिसमें आपकी लिखी फ़ाइल का नाम हो।
  • संदेश को जैसा है वैसा खोजें, पर पहले अपने paths और variable नाम हटा दें — वही खोज को अटकाते हैं।
  • वही स्थिति औज़ार के हर संस्करण में अलग शब्दों में आती है। नतीजे बेमेल लगें तो संस्करण संख्या भी जोड़ें।
  • कोई सुधार चिपकाने से पहले देख लें कि वह क्या फेंक देगा। इनमें कुछ पलटे नहीं जा सकते।

अक्सर पूछे जाने वाले सवाल

Q. “exec /usr/local/bin/entrypoint.sh: exec format error” का क्या मतलब है?

kernel उस निष्पादनीय फ़ाइल का header पहचान नहीं सका, और आजकल यह लगभग हमेशा architecture का बेमेल होता है — Apple Silicon पर बनी arm64 image को amd64 host पर चलाना, या उलटा। जिस shell script की पहली पंक्ति #!/bin/sh छूट गई हो, वह भी यही शब्द देती है। docker build --platform=linux/amd64 से बनाना आम उत्तर है, पर वह बेमेल मिटाता नहीं, emulation से ढक देता है — QEMU से गुज़रने वाला सब कुछ मूल architecture से कई गुना धीमा होता है। जिस image को आप रखेंगे, उसके लिए buildx से दोनों architecture बनाना वह रास्ता है जो चलने के समय कोई क़ीमत नहीं लेता।

Q. इसे कैसे ठीक करें?

docker build --platform=linux/amd64 . — चलाने से पहले ऊपर देख लें कि यह कमांड क्या फेंक देता है।

Q. यह कौन-सा औज़ार देता है?

docker। यह Docker में आता है, और संदेश 5 शब्दों का है।

साथ आने वाले एरर