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