Dockerfile build - possibile ignorare l'errore?


111

Ho un Dockerfile. Durante la creazione dell'immagine, la compilazione fallisce in questo errore:

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

che in realtà è innocuo. La libreria viene compilata correttamente, ma Docker interrompe la compilazione una volta ricevuto questo errore. C'è un modo per istruire Docker a ignorarlo?

Risposte:


220

Sicuro. Docker risponde solo ai codici di errore restituiti dagli RUNscript della shell nel file Dockerfile. Se il tuo Dockerfileha qualcosa come:

RUN make

Potresti sostituirlo con:

RUN make; exit 0

Ciò restituirà sempre un 0codice di uscita (riuscito). Lo svantaggio qui è che la tua immagine sembrerà costruita correttamente anche se ci sono errori effettivi nel processo di costruzione.


2
Sono venuto qui quando cercavo di scappare service php7-fpm start. Restituirebbe 1 e RUN fallirebbe; usare service php7-fpm start; service php7-fpm statusfa il trucco: sembra che risolva un problema anche durante la compilazione, poiché entrambi i comandi eseguiti separatamente darebbero problemi.
igorsantos07

Sono venuto qui quando ho provato a compilare Qt5 dalla sorgente. Verrà compilato bene, ma utilizzando la build simultanea combinato con il fatto che il processo di compilazione Qt ha test in fase di compilazione eseguiti da make (che intenzionalmente fallisce) il mio comando RUN è terminato con errore (2). Si spera che questo risolva il problema!
Lennart Rolland

33

Questo potrebbe interessare coloro i cui potenziali errori nelle immagini non sono abbastanza innocui da passare inosservati / registrati . (Inoltre, non abbastanza rappresentante. Per commentare, quindi qui come risposta.)

Come sottolineato, lo svantaggio di RUN make; exit 0è che non lo sai se la tua build non è riuscita. Quindi, usa piuttosto qualcosa come:

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

In questo modo, ricevi una notifica tramite il registro del processo di creazione dell'immagine docker e puoi vedere cosa è andato male esattamente durante make(o qualsiasi altra cosa l'esecuzione, questo non è limitato a fare).


Questa è una risposta mooolto sottovalutata. Il mio caso d'uso era che alcuni elenchi di pacchetti non erano raggiungibili e apt-get update -ynon funzionavano.
Silviu Burcea il

14

Puoi anche usare lo standard bash ignore error || true, il che è bello se sei nel mezzo di una catena:

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

proprio quello di cui avevo bisogno :) quello che sarebbe ancora meglio è fallire se il lavoro fallisse, ma dopo la fase successiva (pulizia)
csomakk
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.