web-dev-qa-db-fra.com

Dockerfile build - possible d'ignorer l'erreur?

J'ai un fichier Docker. Lors de la construction de l'image, la construction échoue avec 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

ce qui en réalité est inoffensif. La bibliothèque se construit bien, mais Docker arrête la construction dès qu’il reçoit cette erreur. Est-il possible de demander à Docker de l'ignorer?

81
Oskar

Sûr. Docker ne fait que répondre aux codes d'erreur renvoyés par les scripts RUN du shell dans le fichier Dockerfile. Si votre Dockerfile a quelque chose comme:

RUN make

Vous pouvez remplacer cela par:

RUN make; exit 0

Cela retournera toujours un 0 (succès) code de sortie. L'inconvénient ici est que votre image semblera créer correctement, même s'il y a des erreurs réelles dans le processus de construction.

176
larsks

Cela pourrait intéresser ceux dont les erreurs potentielles dans leurs images sont pas assez inoffensifs pour passer inaperçus/enregistrés . (En outre, pas assez de représentants pour commenter, alors voici une réponse.)

Comme on l'a fait remarquer, l'inconvénient de RUN make; exit 0 est que vous ne saurez pas si votre construction a échoué. Par conséquent, utilisez plutôt quelque chose comme:

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

De cette manière, vous êtes averti via le journal du processus de construction de l'image du menu fixe et vous pouvez voir ce qui s'est vraiment mal passé pendant make (ou quelque autre exécution, ce n'est pas limité à make).

16
mths

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

RUN <first stage> && <job that should not fail> || true && <next stage>
4
MortenB