Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
unauthorized-auth-required Linux / DevOps

Docker Error: unauthorized: authentication required — Решение проблемы

Обновлено: 19.08.2026  ·  Официальная база знаний

Архитектура авторизации OCI Distribution Spec и HTTP 401/403

Ошибка Error response from daemon: unauthorized: authentication required генерируется реестром контейнеров в соответствии со спецификацией RFC 7235 / OCI Distribution. Сбой происходит, когда клиент не передал заголовок Authorization: Bearer <token>, токен авторизации истек (expired), учетные данные в файле ~/.docker/config.json повреждены, либо учетная запись не имеет прав на чтение (Pull) или запись (Push) в запрашиваемый репозиторий (RBAC / Namespaces).

Бизнес-риски:

Срыв выкатки релизов в production, блокировка доступа автоматизированных систем к приватным репозиториям компании, риски утечки учетных данных из-за неверной настройки токенов.

Таблица структуры авторизационных данных Docker

Параметр / ФайлРасположениеНазначение
config.json~/.docker/config.json или /root/.docker/config.jsonЛокальное хранилище токенов базовой аутентификации (Base64).
credStore / credsStoreВнешний helper (pass, osxkeychain, secretservice)Безопасное системное хранилище секретов авторизации.
Bearer RealmЗаголовок Www-AuthenticateURL OAuth2-сервера выдачи токенов реестра (Harbor/GitLab).

Пошаговое восстановление прав доступа и авторизации в реестрах

Сценарий 1: Повторная явная авторизация через CLI

Выполните чистый вход в целевой реестр с валидацией имени хоста:

# Вход в Docker Hub:
docker login -u 'myusername'

# Вход в приватный реестр (Harbor / GitLab / Nexus):
docker login registry.example.com -u 'deploy-robot' --password 'glpat-xxxxxxxxx'

# Проверка валидности файла конфигурации:
cat ~/.docker/config.json | jq .auths

Сценарий 2: Очистка зависших и устаревших токенов авторизации

Если в config.json остались невалидные токены, Docker продолжит отправлять их вместо анонимного запроса:

# Явный выход из реестра
docker logout registry.example.com

# Если ошибка сохраняется, выполните сброс сессии:
rm -f ~/.docker/config.json

# Повторный вход
docker login registry.example.com

Сценарий 3: Настройка прав в приватных репозиториях (Harbor/GitLab/AWS ECR)

Проверьте права учетной записи в веб-интерфейсе реестра:

# Для AWS ECR: получение временного токена авторизации (действует 12 часов)
aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.eu-west-1.amazonaws.com

# Для GCP Artifact Registry:
gcloud auth configure-docker europe-docker.pkg.dev

Типовые ошибки администраторов

  • Попытка docker push под учетной записью с правами Read-Only: Роботы CI/CD часто настраиваются только на чтение, что вызывает ошибку unauthorized при сборке.
  • Использование спецсимволов в пароле без экранирования: Передача паролей со знаками $ или ! в shell-командах без кавычек ломает строку авторизации.
Проблемы с разграничением прав и доступом к приватным реестрам?
ITSTM внедрит централизованную систему управления секретами (HashiCorp Vault) и настроит ролевую модель доступа (RBAC) в реестрах.
Практический опыт инженера: Никогда не используйте личные пароли разработчиков на production-нодах. Создавайте в Harbor/GitLab сервисные аккаунты (Robot Accounts) с ограниченным сроком действия токена и доступом строго к одному репозиторию проекта.

Частые вопросы (FAQ)

Почему ошибка возникает при скачивании публичного образа?

Если имя образа написано с ошибкой, Docker Hub предполагает, что это приватный репозиторий, и запрашивает авторизацию вместо ошибки 404.

Где хранятся учетные данные при запуске Docker от root?

Учетные данные сохраняются в домашней директории текущего пользователя: для root это /root/.docker/config.json, для обычного пользователя — /home/user/.docker/config.json.

Как передать credentials в Kubernetes без docker login на нодах?

Создайте ImagePullSecret через kubectl: kubectl create secret docker-registry regcred --docker-server=... --docker-username=... --docker-password=...

Почему токен сбрасывается после перезагрузки сервера?

Если директория /root смонтирована как tmpfs или очищается скриптами инициализации, сохраняйте config.json через persistent volume или переменные окружения.