🐳 Docker может передавать секреты на этапе сборки без сохранения их в слоях образа
👁 Если во время сборки нужно скачать приватные зависимости, обратиться к закрытому реестру или получить пакет из внутреннего репозитория, обычный ARG или ENV для токенов — плохой выбор. BuildKit поддерживает
📝 Передаём секрет непосредственно в сборку:
Создаём файл с токеном на хосте и передаём его через --secret. Значение не попадает в аргументы сборки или переменные окружения образа.
📝 Используем секрет внутри Dockerfile:
BuildKit монтирует секрет только на время выполнения конкретной команды. Приложение сборки может прочитать его из временного файла.
📝 Проверяем, что секрет не попал в итоговый образ:
Секретный файл доступен только в инструкции с соответствующим mount. Важно также не выводить его содержимое в журналы и не сохранять токен в конфигурации Git, которая попадёт в другой слой.
❗️ RUN
tags: #docker #devops #разработка
🧭 @recura_tech
👁 Если во время сборки нужно скачать приватные зависимости, обратиться к закрытому реестру или получить пакет из внутреннего репозитория, обычный 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