🐳 Docker может передавать секреты на этапе сборки без сохранения их в слоях образа
🐳 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