Сборка Dockerfile - возможно ли игнорировать ошибку?

У меня есть 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

который на самом деле безвреден. Библиотека собирается нормально, но Docker останавливает сборку, как только получает эту ошибку. Есть ли способ, которым я могу поручить Docker просто игнорировать это?

3 ответа

Решение

Конечно. Docker просто отвечает на коды ошибок, возвращаемые RUN сценарии оболочки в Dockerfile, Если твой Dockerfile имеет что-то вроде:

RUN make

Вы можете заменить это на:

RUN make; exit 0

Это всегда будет возвращать 0 (успешный) код выхода. Недостатком здесь является то, что ваш образ будет выглядеть успешно, даже если в процессе сборки есть реальные ошибки.

Это может представлять интерес для тех, чьи потенциальные ошибки в их изображениях не настолько безобидны, чтобы остаться незамеченными / зарегистрированными. (Кроме того, недостаточно комментариев для комментариев, поэтому здесь, в качестве ответа.)

Как указывалось, недостаток RUN make; exit 0 это если вы не узнаете, если ваша сборка не удалась. Следовательно, лучше использовать что-то вроде:

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

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

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

RUN <first stage> && <job that should not fail> || true && <next stage>
Другие вопросы по тегам