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?

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.


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).


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>

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.