🐳 Docker может передавать секреты на этапе сборки без сохранения их в слоях образа

👁 Если во время сборки нужно скачать приватные зависимости, обратиться к закрытому реестру или получить пакет из внутреннего репозитория, обычный ARG или ENV для токенов — плохой выбор. BuildKit поддерживает --mount=type=secret: секрет временно появляется внутри конкретной инструкции RUN и не записывается в слой образа.

📝 Передаём секрет непосредственно в сборку:

Создаём файл с токеном на хосте и передаём его через --secret. Значение не попадает в аргументы сборки или переменные окружения образа.



DOCKER_BUILDKIT=1 docker build \
--secret id=repo_token,src="$HOME/.config/myapp/token" \
-t myapp:latest .

📝 Используем секрет внутри Dockerfile:

BuildKit монтирует секрет только на время выполнения конкретной команды. Приложение сборки может прочитать его из временного файла.



# syntax=docker/dockerfile:1

FROM golang:1.25 AS build
WORKDIR /src

COPY go.mod go.sum ./

RUN --mount=type=secret,id=repo_token \
TOKEN="$(cat /run/secrets/repo_token)" && \
GOPRIVATE=git.example.com \
git config --global \
url."https://${TOKEN}@git.example.com/".insteadOf \
"https://git.example.com/"

COPY . .
RUN go build -o /out/app ./cmd/app

📝 Проверяем, что секрет не попал в итоговый образ:

Секретный файл доступен только в инструкции с соответствующим mount. Важно также не выводить его содержимое в журналы и не сохранять токен в конфигурации Git, которая попадёт в другой слой.



docker history --no-trunc myapp:latest

docker image inspect myapp:latest \
--format '{{json .Config.Env}}'

❗️ RUN --mount=type=secret позволяет использовать закрытые токены и ключи в процессе сборки, не встраивая их напрямую в слои образа. Но сам механизм не защищает от намеренного копирования секрета в артефакты или журналы — команды сборки тоже должны быть написаны безопасно.

tags: #docker #devops #разработка

🧭 @recura_tech
Просмотры: 277
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти