Construction de Dockerfile - possible d'ignorer l'erreur?

112

J'ai un Dockerfile. Lors de la création de l'image, la génération échoue sur cette erreur:

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

qui en réalité est inoffensif. La bibliothèque se construit correctement, mais Docker arrête la construction une fois qu'il reçoit cette erreur. Est-il possible que je puisse demander à Docker d'ignorer cela?

Oskar
la source

Réponses:

221

Sûr. Docker ne fait que répondre aux codes d'erreur renvoyés par les RUNscripts shell dans le Dockerfile. Si vous avez Dockerfilequelque chose comme:

RUN make

Vous pouvez le remplacer par:

RUN make; exit 0

Cela renverra toujours un 0code de sortie (de réussite). L'inconvénient est que votre image apparaîtra à construire avec succès , même s'il y a des erreurs réelles dans le processus de construction.

larsks
la source
2
Je suis venu ici en essayant de courir service php7-fpm start. Il renverrait 1 et RUN échouerait; utiliser service php7-fpm start; service php7-fpm statusfait l'affaire - cela semble également résoudre un problème pendant la construction, car les deux commandes s'exécutant séparément poseraient des problèmes.
igorsantos07
Je suis venu ici en essayant de construire Qt5 à partir des sources. Cela serait très bien construit, mais en utilisant une construction simultanée combinée au fait que le processus de construction Qt a des tests de construction exécutés à partir de make (qui échouent intentionnellement) ma commande RUN s'est terminée avec l'erreur (2). J'espère que cela résoudra le problème!
Lennart Rolland
34

Cela pourrait intéresser ceux dont les erreurs potentielles dans leurs images ne sont pas suffisamment inoffensives pour passer inaperçues / enregistrées . (De plus, pas assez de représentants pour commenter, alors voici une réponse.)

Comme indiqué, l'inconvénient RUN make; exit 0est que vous ne savez pas si votre build a échoué. Par conséquent, utilisez plutôt quelque chose comme:

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

Comme ça, vous êtes notifié via le journal du processus de construction d'image de docker, et vous pouvez voir exactement ce qui s'est mal passé pendant make(ou quoi que ce soit d'autre exécution, ce n'est pas limité à faire).

mois
la source
C'est une réponse sous-estimée. Mon cas d'utilisation était que certaines listes de packages n'étaient pas accessibles et apt-get update -yéchouaient.
Silviu Burcea
16

Vous pouvez également utiliser l'erreur standard bash ignore || true, ce qui est bien si vous êtes au milieu d'une chaîne:

RUN <first stage> && <job that might fail> || true && <next stage>
MortenB
la source
juste ce dont j'avais besoin :) ce qui serait encore plus préférable est d'échouer si le travail échouait, mais après la prochaine étape (nettoyage)
csomakk le