Dockerfile बिल्ड - त्रुटि को अनदेखा करना संभव है?


111

मुझे डॉकरफाइल मिला है। छवि बनाते समय, इस त्रुटि पर बिल्ड विफल हो जाता है:

automake: error: no 'Makefile.am' found for any configure output
Error build: The command [/bin/sh -c aclocal && autoconf && automake -a] returned a non-zero code: 1

जो वास्तव में हानिरहित है। लाइब्रेरी ठीक बनाता है, लेकिन डॉकर इस त्रुटि को प्राप्त करने के बाद बिल्ड को रोक देता है। क्या कोई तरीका है जिससे मैं डॉकटर को सिर्फ इस बात की अनदेखी करने का निर्देश दे सकता हूँ?

जवाबों:


220

ज़रूर। डॉकर सिर्फ RUNशेल कोड द्वारा दिए गए त्रुटि कोड का जवाब दे रहा है Dockerfile। अगर आपका Dockerfileकुछ ऐसा है:

RUN make

आप इसे बदल सकते हैं:

RUN make; exit 0

यह हमेशा 0(सफलता) निकास कोड लौटाएगा । नुकसान यह है कि यहाँ अपनी छवि को सफलतापूर्वक निर्माण करने के लिए भले ही दिखाई देगा कर रहे हैं निर्माण प्रक्रिया में वास्तविक त्रुटियों।


2
दौड़ने की कोशिश करने पर मैं यहाँ आया हूँ service php7-fpm start। यह 1 लौटेगा और RUN विफल होगा; service php7-fpm start; service php7-fpm statusचाल का उपयोग करते हुए - यह निर्माण के दौरान एक समस्या को हल करने के लिए भी लगता है, क्योंकि दोनों अलग-अलग चलने वाले आदेश परेशानी देंगे।
igorsantos07

मैं यहाँ आया हूँ जब स्रोत से Qt5 बनाने की कोशिश कर रहा हूँ। यह ठीक-ठाक निर्माण करेगा, लेकिन इस तथ्य के साथ संयुक्त समवर्ती निर्माण का उपयोग करते हुए कि क्यूटी निर्माण प्रक्रिया में बिल्ड-टाइम टेस्ट मेक से चला है (जो जानबूझकर विफल हो गया) मेरी आरयूएन कमांड त्रुटि के साथ बाहर निकल गई (2)। यह उम्मीद है कि समस्या को हल करेगा!
लेनार्ट रोलैंड

33

यह उन लोगों के लिए ब्याज की हो सकती है, जिनकी छवियों में संभावित त्रुटियां हानिरहित नहीं हैं, जो किसी का ध्यान नहीं है / लॉग इन करने के लिए । (इसके अलावा, टिप्पणी के लिए पर्याप्त प्रतिनिधि नहीं है, इसलिए यहां एक उत्तर के रूप में।)

जैसा कि बताया गया RUN make; exit 0है, यदि आपका निर्माण विफल हो गया है, तो इसका नुकसान आपको नहीं पता है। इसलिए, जैसे कुछ का उपयोग करें:

make test 2>&1 > /where/ever/make.log || echo "There were failing tests!"

इस तरह, आपको डॉकटर छवि निर्माण प्रक्रिया लॉग के माध्यम से सूचित किया जाता है, और आप देख सकते हैं कि वास्तव में क्या बुरा हुआ make(या किसी अन्य निष्पादन के दौरान , यह बनाने के लिए प्रतिबंधित नहीं है)।


यह वाया अंडररेटेड जवाब है। मेरा उपयोग मामला कुछ पैकेज सूचियों में नहीं apt-get update -yथा, जो उपलब्ध नहीं था और विफल हो रहा था।
सिलविउ बर्किया

14

आप मानक बैश इग्नोर एरर का भी उपयोग कर सकते हैं || true, यदि आप एक चेन के बीच में हैं तो अच्छा है:

RUN <first stage> && <job that might fail> || true && <next stage>

बस मुझे क्या चाहिए :) अगर नौकरी विफल हो जाए तो और भी बेहतर क्या होगा, लेकिन अगले चरण (सफाई) के बाद
csomakk
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.