Выбор ответа Middle Dockerfile и multi-stage обновлено

Секрет через ARG

Вопрос

Почему нельзя передавать токен приватного npm-реестра через ARG NPM_TOKEN и --build-arg?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Значение остаётся в истории образа (docker history); нужен RUN --mount=type=secret. Значения ARG, использованные в RUN, видны в истории сборки, а если токен записали в .npmrc, он останется в слое.

Варианты ответа

  1. ARG недоступен в инструкциях RUN, токен окажется пустым, и npm ci упадёт с ошибкой 401
  2. Значение остаётся в истории образа (docker history); нужен RUN --mount=type=secretправильный ответ
  3. ARG принимает только числа и короткие строки, длинный токен будет обрезан
  4. build-arg отправляется в реестр вместе с манифестом образа в открытом виде

Разбор

Значения ARG, использованные в RUN, видны в истории сборки, а если токен записали в .npmrc, он останется в слое. RUN --mount=type=secret монтирует секрет только на время инструкции, в слои и историю он не попадает. ARG доступен в RUN и принимает строки. В реестр build-arg сам по себе не отправляется, но образ с историей отправляется.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.