Загрузить файл
  1. base64hub
  2. Веб и токены
  3. Декодер .dockerconfigjson

Декодер .dockerconfigjson для imagePullSecrets

Вставьте Secret типа kubernetes.io/dockerconfigjson, его значение в Base64 или ~/.docker/config.json и узнайте, в какой реестр и под какой учётной записью он входит.

Бесплатно без регистрации и ограничений Локально ничего не загружается Два слоя декодируются и Base64 из Secret, и поле auth Обновлено 27 окт. 2026 г.

Обработка идёт в браузере. Эта страница не может никуда отправить ваши данные – откуда мы это знаем

Как декодировать pull secret

  1. Вставьте в поле ввода одно из трёх:
    • вывод kubectl get secret regcred -o yaml
    • только значение .dockerconfigjson в Base64
    • сам JSON, например ваш ~/.docker/config.json
  2. Первыми идут учётные данные реестров: реестр, имя пользователя, пароль и значение auth, разобранное на пользователя и пароль.
  3. Чтобы, наоборот, создать Secret, откройте Собрать pull secret и заполните Реестр, Имя пользователя, Пароль и при желании Email. Получится тот же Secret, что и у kubectl create secret docker-registry.

Двойной Base64 внутри pull secret

Pull secret заворачивает Base64 внутрь Base64, поэтому вручную его декодируют в два шага.

apiVersion: v1
kind: Secret
metadata:
  name: regcred
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: eyJhdXRocyI6eyJyZWdpc3RyeS5leGFtcGxlLmNvbSI6eyJ1c2VybmFtZSI6ImNpLWJvdCIsInBhc3N3b3JkIjoicHVsbC1vbmx5LXRva2VuIiwiYXV0aCI6Ilkya3RZbTkwT25CMWJHd3RiMjVzZVMxMGIydGxiZz09In19fQ==

Первый слой, значение Secret, декодируется в JSON конфига Docker:

{"auths":{"registry.example.com":{"username":"ci-bot","password":"pull-only-token","auth":"Y2ktYm90OnB1bGwtb25seS10b2tlbg=="}}}

Второй слой, auth, декодируется в ci-bot:pull-only-token. Значение .dockerconfigjson, созданное командой kubectl create secret docker-registry, начинается с eyJhdXRocyI6 (Base64 от {"auths":), поэтому такие строки легко заметить в логах и манифестах.

Форматы, которые могут встретиться

ВидОткуда
{"auths": {"host": {...}}}.dockerconfigjson, современный ~/.docker/config.json
{"host": {"auth": "...", "email": "..."}}устаревшие Secret типа .dockercfg (kubernetes.io/dockercfg)
"https://index.docker.io/v1/" в качестве хостаDocker Hub
identitytoken вместо пароляреестры, которые после docker login выдают OAuth refresh-токены

Здесь декодируются оба типа Secret. В устаревшем .dockercfg нет обёртки auths, так что скрипт, написанный под один формат, в другом молча ничего не найдёт.

Декодирование в shell

kubectl get secret regcred -o jsonpath='{.data.\.dockerconfigjson}' | base64 --decode | jq .
kubectl get secret regcred -o jsonpath='{.data.\.dockerconfigjson}' | base64 --decode \
  | jq -r '.auths | to_entries[] | "\(.key) \(.value.auth | @base64d)"'

Вторая команда выводит по строке registry user:password на каждый реестр. Значение auth имеет тот же формат, что и заголовок Basic Auth, так что его прочитает и декодер Basic Auth.

Почему pull secret не работает

  • Не тот ключ реестра. Хост в auths должен совпадать со ссылкой на образ: для ghcr.io/org/app нужен ghcr.io, а образам с Docker Hub нужен ключ https://index.docker.io/v1/.
  • Secret в другом пространстве имён. imagePullSecrets находит Secret только в пространстве имён самого пода.
  • Истёкший токен. Некоторые реестры выдают короткоживущие пароли; токены Amazon ECR, например, действуют 12 часов. Secret, который работал вчера, сегодня даёт ImagePullBackOff.
  • JSON, собранный вручную. Пароль, скопированный с переводом строки или пробелом в конце, или значение auth, закодированное не из той строки, ломаются молча. Сравните декодированный auth с полями имени пользователя и пароля или пересоздайте Secret через kubectl create secret docker-registry.

Любой, кто может прочитать Secret, может воспользоваться учётной записью: Base64 ничего не скрывает. Давайте pull secret только токены реестра с правами на чтение.

Вопросы и ответы

Как декодировать imagePullSecret?

Вставьте в поле выше вывод kubectl get secret regcred -o yaml. В shell kubectl get secret regcred -o jsonpath='{.data.\.dockerconfigjson}' | base64 --decode выводит JSON, а в его поле auth лежит ещё один слой Base64.

Что за поле auth в config.json?

В нём лежит username:password в Base64, в том же формате, что у HTTP-заголовка Basic Authorization. Y2ktYm90OnB1bGwtb25seS10b2tlbg== декодируется в ci-bot:pull-only-token.

Почему запись в auths моего ~/.docker/config.json пустая?

Если задан credsStore или credHelpers, Docker хранит пароль в хранилище учётных данных, например в системной связке ключей. Тогда в файле для каждого реестра только {}, и декодировать нечего.