Створення Dockerfile - можливо ігнорувати помилку?


112

У мене є Dockerfile. Під час створення зображення збірка не вдається на цій помилці:

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

Звичайно. Docker просто відповідає на коди помилок, повернені 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 з джерела. Було б просто добре, але використовуючи одночасну збірку в поєднанні з тим, що процес збирання Qt має випробування часу збирання, які виконуються з make (що навмисно виходить з ладу), моя команда RUN вийшла з помилкою (2). Це, сподіваємось, вирішить проблему!
Lennart Rolland

33

Це може зацікавити тих, чиї потенційні помилки в їх зображеннях не є нешкідливими для того, щоб залишатись непоміченими / зареєстрованими . (Крім того, недостатньо відповідей для коментарів, тому тут як відповідь.)

Як зазначалося, недоліком RUN make; exit 0є те, що ви не дізнаєтесь, якщо ваша збірка не вдалася. Отже, скоріше використовуйте щось на кшталт:

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

Так, ви отримуєте сповіщення через журнал процесу збирання зображень докера, і ви можете побачити, що саме пішло погано під час виконання make(або будь-якого іншого виконання, це не обмежується).


Це ваая занижена відповідь. У моєму випадку використання деяких списків пакетів було недоступне і apt-get update -yне вдалося.
Сільвіу Бурча

14

Ви також можете використовувати стандартну помилку bash ignore || true, що добре, якщо ви знаходитесь посередині ланцюга:

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

просто те, що мені було потрібно :) що було б ще краще - це провалитися, якщо робота не вдасться, але після наступного етапу (прибирання)
csomakk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.