Dockerfile перехватывает вывод команды - PullRequest
0 голосов
/ 13 ноября 2018

В моем Dockerfile есть следующая строка, которая должна захватить номер дисплея хоста:

RUN      DISPLAY_NUMBER="$(echo $DISPLAY | cut -d. -f1 | cut -d: -f2)" && echo $DISPLAY_NUMBER

Когда я пытался создать Dockerfile, DISPLAY_NUMBER пуст.Но когда я запускаю ту же команду прямо в терминале, я вижу результат.Здесь я что-то не так делаю?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Переменные среды хоста не могут быть переданы во время сборки, только во время выполнения.

Можно указать только аргументы сборки:

сначала "объявив аргумент"

ARG DISPLAY_NUMBER

и затем запустив docker build . --no-cache -t disp --build-arg DISPLAY_NUMBER=$DISPLAY_NUMBER

Вы можете работатьобойти эту проблему, используя envsubst трюк

RUN      echo $DISPLAY_NUMBER

и в командной строке:

envsubst < Dockerfile | docker build . -f -

, который перезапишет файл Docker в памяти и передаст его в Docker с измененной переменной среды.

Редактировать: Обратите внимание, что это решение довольно бесполезно, потому что вы, вероятно, все равно захотите сделать это во время выполнения, потому что это значение должно зависеть не от того, где изображение построено, а от того, где оно находитсязапустить.

Я бы лично переместил эту логику в ваш ENTRYPOINT или CMD скрипт.

0 голосов
/ 13 ноября 2018

Команды, указанные с RUN, выполняются при построении изображения.Во время сборки нет отображения, следовательно, вывод пуст.

Вы можете обменять RUN на ENTRYPOINT, тогда команда выполняется при запуске докера.

Но как переадресовать хосты?отображение в контейнере совсем другое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...