отправлять ошибки из директив "docker build" в stderr вместо stdout? - PullRequest
0 голосов
/ 15 апреля 2020

При создании изображений 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?

...