При создании изображений docker ошибки, вызванные командами RUN
, печатаются в stdout, а не в stderr. Например:
Если я запускаю команду flooby
на своей оболочке, то факт, что она не выполняется из-за того, что команда не найдена, выводится в stderr:
$ flooby 2> err.log
$ cat err.log
bash: flooby: command not found
Однако, если Я создаю Docker изображение со строкой RUN flooby
, хотя (предположительно) внутри контейнера / изображения / независимо от того, что строится, ошибка будет выводиться в stderr, docker выводит его в stdout:
$ docker build -t stderr-test . 2> err.log
Sending build context to Docker daemon 121.1MB
Step 1/2 : FROM ruby:2.6
---> d98e4013532b
Step 2/2 : RUN flooby
---> Running in 118f7d467b43
/bin/sh: 1: flooby: not found
$ cat err.log
The command '/bin/sh -c flooby' returned a non-zero code: 127
Здесь мы видим, что то, что было напечатано на stderr, печатается на stdout, а то, что печатается на stderr, - это сообщение Docker о том, что возникла проблема при запуске flooby
с кодом ошибки.
Это вызывает проблемы в CI, когда я хочу агрегировать журналы и иметь возможность фильтровать их на основе уровня журнала (информация / ошибка). Зная, что flooby
вернул ненулевой код 127, ничего не стоит. Мне нужно знать что выводит ошибка при запуске flooby .
Кто-нибудь знает, как заставить docker build
печатать сообщения об ошибках из директив сборки для печати в stderr, а не в stdout?