Могу ли я создать временную переменную в Dockerfile и использовать ее позже? - PullRequest
1 голос
/ 17 апреля 2019

В моем Dockerfile я хочу временно переключиться на root, а затем вернуться к исходному пользователю.

originalUser=`RUN whoami`

USER root
RUN apk update
RUN apk add curl

# switch back to the user before root
USER $originalUser

Можно ли сделать что-то подобное в Dockerfile?

1 Ответ

3 голосов
/ 17 апреля 2019

С одной стороны, нет, ничего подобного нет.Единственными подобными вещами являются ARG (которые передаются в командной строке) и ENV (которые являются фиксированными строками), ни один из которых не может быть установлен динамически на основе выходных данных команды.

С другой стороныв контексте образа Docker вы как автор Dockerfile имеете полный и абсолютный контроль над тем, что входит в образ.Вам никогда не придется задавать вопросы типа «что, если у пользователя другое имя пользователя» или «что, если он хочет установить другой путь»: вы можете выбрать фиксированные значения для этих вещей.Я бы посоветовал:

  • Если вы устанавливаете один двоичный файл или что-то с «нормальной» процедурой установки (в ней есть опция ./configure --prefix=... в стиле Autoconf), установите ее в системные каталоги
  • Если вы устанавливаете что-то на языке сценариев, который не входит в «нормальные» каталоги, /app является обычным местом для него
  • Устанавливайте программное обеспечение исключительно как пользователь root (даже вашприложение);переключитесь на некорневую USER только один раз в конце вашего файла Dockerfile
  • Не пытайтесь зеркально отразить какую-либо структуру системы, имена пользователей или числовые идентификаторы пользователей;если вы попытаетесь запустить изображение где-то еще, они не будут совпадать

Если вы пытаетесь расширить какое-то другое изображение, вам следует выяснить, какое имя пользователя оно использует, и вставить фиксированную строку вкаталог USER в конце Dockerfile вашего производного изображения.

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