Докер не авторизован: требуется аутентификация - при успешном входе в систему

При отправке образа докера (после успешного входа в систему) с моего хоста я получаю "неавторизованный: требуется аутентификация".

Подробности ниже.

-bash-4.2# docker login --username=asamba --email=anand.sambamoorthy@gmail.com
WARNING: login credentials saved in /root/.docker/config.json
*Login Succeeded*
-bash-4.2#
-bash-4.2# docker push asamba/docker-whale

Do you really want to push to public registry? [y/n]: y
The push refers to a repository [docker.io/asamba/docker-whale] (len: 0)
faa2fa357a0e: Preparing
unauthorized: authentication required
  • Версия Docker: 1.9.1 (как клиентская, так и серверная)
  • http://hub.docker.com/ есть репозиторий (asamba/docker-whale).

/ Var / log / messages показывает 403, я не знаю, если это докер. Увидеть ниже.

Apr 16 11:39:03 localhost journal: time="2016-04-16T11:39:03.884872524Z" level=info msg="{Action=push, Username=asamba, LoginUID=1001, PID=2125}"
Apr 16 11:39:03 localhost journal: time="2016-04-16T11:39:03.884988574Z" level=error msg="Handler for POST /v1.21/images/asamba/docker-whale/push returned error: Error: Status 403 trying to push repository asamba/docker-whale to official registry: needs to be forced"
Apr 16 11:39:03 localhost journal: time="2016-04-16T11:39:03.885013241Z" level=error msg="HTTP Error" err="Error: Status 403 trying to push repository asamba/docker-whale to official registry: needs to be forced" statusCode=403
Apr 16 11:39:05 localhost journal: time="2016-04-16T11:39:05.420188969Z" level=info msg="{Action=push, Username=asamba, LoginUID=1001, PID=2125}"
Apr 16 11:39:06 localhost kernel: XFS (dm-4): Mounting V4 Filesystem
Apr 16 11:39:06 localhost kernel: XFS (dm-4): Ending clean mount
Apr 16 11:39:07 localhost kernel: XFS (dm-4): Unmounting Filesystem

Любая помощь приветствуется, пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Я также сделал толчок с -f. Неудачно!

33 ответа

Решение

ХОРОШО! не берите в голову; Я нашел решение. с 403 Подозреваемый, что HTTP не идет к правильному URL.

Измените файл, в котором хранятся учетные данные ~/.docker/config.json из значения по умолчанию, сгенерированного из

{
        "auths": {
                "docker.io": {
                        "auth": "XXXXXXXXXXXXX",
                        "email": "x.y@gmail.com"
                }
        }
}

Обратите внимание на изменение по сравнению с docker.io -> index.docker.io/v1. Это изменение.

{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "XXXXXXXXXXXXX",
                        "email": "x.y@gmail.com"
                }
        }
}

Надеюсь, это поможет.

Обратите внимание, что поле auth должно быть в кодировке "username:password" base64, например: "username:password" в кодировке base64 "dXNlcm5hbWU6cGFzc3dvcmQ="

поэтому ваш файл будет содержать:

"auth": "dXNlcm5hbWU6cGFzc3dvcmQ="

У меня тоже была такая же проблема. Вот как я ее решаю.

Шаг 1: войдите в Docker Hub

docker login --username=<user username> --email=<user email address>

Шаг 2: создайте репозиторий в центре докера. скажем "mysqlserver: sql".

docker push <user username>/mysqlserver:sql

Edit (13/08/2017)

На основании комментария @KaraPirinc, в Docker версии 17, чтобы войти (Шаг 1),

docker login -u username -p password

Размещенное вами решение не работает для меня...

Это то, что работает для меня:

  1. Создайте репозиторий с нужным именем.

  2. При фиксации изображения назовите изображение как репозиторий, включая имя пользователя <dockerusername>/desired-name, Например, radu/desired-name,

Проблема, с которой сталкиваются новички, заключается в том, что мы склонны относиться к хранилищу Docker Hub точно так же, как к хранилищу Maven, и думаем, что он может содержать много разных файлов, папок и другого содержимого.

С другой стороны, Docker-репозиторий - это всего лишь одно изображение, которое не содержит ничего другого. Он может содержать разные версии одного и того же изображения, но будет содержать только одно изображение.

Итак, назовите свой репозиторий в Docker Hub с тем же именем, что и образ, который вы хотите вставить в него, и используйте свое имя пользователя Dockerhub в качестве префикса. Например, если ваше имя пользователя - myusername, а имя вашего изображения - docker-whale, обязательно назовите ваш репозиторий dockerhub как docker-whale и используйте приведенные ниже команды, чтобы пометить и отправить ваше изображение в репозиторий:

docker logout                                   # to make sure you're logged out and not cause any clashes
docker tag <imageId> myusername/docker-whale    # use :1.0.0 for specific version, default is 'latest'
docker login --username=myusername              # use the username/pwd to login to docker hub
docker push myusername/docker-whale             # use :1.0.0 for pushing specific version, default is 'latest'

Если вы используете heroku, убедитесь, что вы не забыли "heroku container:login" перед нажатием.

У меня была такая же проблема, но я исправил это с помощью push с указанным URL. как: вход в докер -u https://index.docker.io/v1/

консольный вывод:

The push refers to a repository [docker.io/<username>/richcity]
adc9144127c1: Preparing 
4db5654f7a64: Preparing 
ce71ae73bc60: Preparing 
e8e980243ee4: Preparing 
d773e991f7d2: Preparing 
bae23f4bbe95: Waiting 
5f70bf18a086: Waiting 
3d3e4e34386e: Waiting 
e72d5d9d5d30: Waiting 
8d1d75696199: Waiting 
bdf5b19f60a4: Waiting 
c8bd8922fbb7: Waiting 
unauthorized: authentication required

1010deiMac:dockerspace whoami$ docker login -u <username> https://index.docker.io/v1/
Password: 
Login Succeeded
1010deiMac:dockerspace whoami$ docker push <username>/richcity 
The push refers to a repository [docker.io/<username>/richcity]
adc9144127c1: Pushed 
4db5654f7a64: Pushed 
ce71ae73bc60: Pushed 
e8e980243ee4: Pushed 
d773e991f7d2: Pushed 
bae23f4bbe95: Pushed 
5f70bf18a086: Pushed 
3d3e4e34386e: Pushing [=============>                                     ] 45.07 MB/165.4 MB
e72d5d9d5d30: Pushed 
8d1d75696199: Pushing [>                                                  ] 1.641 MB/118.1 MB
bdf5b19f60a4: Pushing [============>                                      ]   142 MB/568.4 MB
c8bd8922fbb7: Pushing [========================>                          ] 59.44 MB/121.8 MB

Я столкнулся с подобной проблемой с таким же бесполезным сообщением об ошибке, но это произошло потому, что я пытался выдвинуть образ, созданный мной, к управляемому экземпляру машины-докера.

Когда я вошел в сам экземпляр, сделал docker login а также docker push все работало нормально.

Если это кому-то поможет, мне удалось решить эту проблему с помощью следующей команды в командной строке:

      az acr login -n MyContainerName

После этого я мог бежать docker push успешно.

Хотя стандартный процесс состоит в том, чтобы войти в систему, а затем отправить ее в реестр докеров, хитрость для преодоления этой конкретной проблемы состоит в том, чтобы войти, указав имя пользователя и пароль в одной строке.

Так:

docker login -u xxx -p yyy sampledockerregistry.com/myapp 
docker push sampledockerregistry.com/myapp

Работает

в то время как

docker login sampledockerregistry.com 
username : xxx
password : yyy
Login Succeeded

docker push sampledockerregistry.com/myapp

Сбой

Даже я залогинился и проверил всю конфигурацию, она все равно не работает!!!

Оказалось, что когда я строю свой докер, я забываю поставить свое имя пользователя перед именем репо

docker build docker-meteor-build 

(построить успешно)

А потом, когда я толкнул в свой репозиторий, я использовал

docker push myname/docker-meteor-build 

Это покажет unauthorized authentication required

Итак, решение - это имя сборки, а push должен быть точно таким же

docker build myname/docker-meteor-build 
docker push myname/docker-meteor-build 

Моя проблема была неверным токеном авторизации через 5 минут. Толчок занял более 5 минут из-за размера изображения.

Я исправил это, увеличив "Длительность токена авторизации" до 10 минут.

Вот решение для моего случая (частные репозитории, бесплатный тарифный план)

https://success.docker.com/Datacenter/Solve/Getting_%22unauthorized%3A_authentication_required%22_when_trying_to_push_image_to_DTR

Имя сборки образа для отправки должно иметь такое же имя репозитория.

Пример: репозитории на док-хабе: accountName/resposName имя сборки образа "accountName/resposName" -> сборка докера -t accountName/resposName

затем введите docker push accountName/resposName: последний

Это все.

Пытаться docker logout сначала, затем повторно docker login

То, что работало для меня, было создать новый репозиторий и переименовать изображение с

$ docker tag image_id myname/server:latest

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

Docker позволяет вам иметь 6 имен с частными именами, даже если вы платите только за 5, но не продвигаете это 6-е изображение. Отсутствие информативного сообщения сбивает с толку и раздражает.

У меня была аналогичная проблема.

Error response from daemon: Get https://registry-1.docker.io/v2/hadolint/hadolint/manifests/latest: unauthorized: incorrect username or password

Я обнаружил, что даже если я успешно войду с docker loginкоманда, никакое извлечение не удалось. Я попытался очистить~/.docker/config.json но ничего не улучшилось.

Заглянув в файл конфигурации, я увидел, что учетные данные были сохранены не там, а в "credsStore": "secretservice". В Linux это оказываетсяseahorse или Passwords and Keysинструмент. Я проверил там и очищаю все логины в докере. После этого новый логин в докере работал должным образом.

Та же проблема здесь, во время нажатия изображения:

unauthorized: authentication required

Что я сделал:

docker login --username=yourhubusername --email=youremail@company.com

Который он напечатал:

--email устарел (но вход в систему все еще успешен)

Решение: используйте последний синтаксис логина.

docker login

Он запросит имя пользователя и пароль в интерактивном режиме. Тогда толчок изображения просто работает.

Даже после использования нового синтаксиса мой ~/.docker/config.json выглядит так после входа в систему:

{
    "auths": {
        "https://index.docker.io/v1/": {}
    },
    "credsStore": "osxkeychain"
}

Таким образом, учетные данные находятся в цепочке для ключей macOS.

Убедитесь, что у вас есть больше слотов для частных изображений.

В моем случае я преобразовал пользователя в организацию, и он потерял один бесплатный приватный образ, поэтому предыдущие попытки, которые работали, больше не работали.

Проблема с прокси.

Отключите VPN, если вы работаете над ним.

https://forums.docker.com/t/failed-with-status-401-unauthorized/11023/3

Вы можете mv файл xxx/.docker/config.json где-нибудь для обработки. Затем попробуйте снова войти в систему, чтобы создать новый файл config.json.

#mv xx/.docker/config.json xx/.docker/config_old.json
#docker login https://index.docker.io/v1/
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: YOUR USERNAME
Password: YOUR PASSWORD
WARNING! Your password will be stored unencrypted in /xxx/.docker/config.json.
Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

я столкнулся с той же проблемой с Heroku и Docker, решение было

      docker login
docker build . -t <project_name> 
heroku container:login
heroku container:push web -a <project_name>

If you running windows 7 docker Registry

  1. Start **Docker Quick Start terminal** run (this terminal enables connection) Until you pushed images, that will keep token alive.
  2. Login docker login
  3. Make sure you tag the image with username

    docker build -f Dockerfile -t 'username'/imagename

  4. push image

    docker image push username/imagename

Note: image name all lowercase

В вашем конфигурационном файле ~/.docker/config.json добавить

{
        "auths": {
             "https://index.docker.io/v1/": {
                        "auth": "XXXXXXXXXXXXX",
                        "email": "my_email@gmail.com"
                }
        }
}

где XXXXX - это кодировка base64 вашего имени пользователя: пароль (включено :) на https://hub.docker.com/

в моем случае у меня была та же ошибка с тягой. проблема (под окнами) была спровоцирована двойным процессом запуска докера, поэтому убейте их всех и перезапустите один сервис, и он заработает.

Эта ошибка также появляется, если дата/время/часовой пояс вашей системы установлены неправильно. Чтобы исправить это, убедитесь, что настройки системного времени верны.

Я получил аналогичную ошибку для push /sudo docker push / sudo docker в репозитории ecr. Это потому, что aws cli установлен в моем пользователе (abc) и docker установлен в корневом пользователе. Я попытался запустить sudo docker push в моем пользователе (abc)

Исправлено это, установив aws cli в root, настроив aws используя aws configure в root и запустив sudo docker push to ecr для пользователя root

У меня была такая же проблема, и я могу ее исправить. изменить ~/.docker/config.json файл, как показано ниже

      {
    "auths": {
        "XxX": {
            "auth": "XxX"
        }
    }
}

и не забудьте перезапустить службу докеров.

      service docker restart 

наслаждаться

Я пробовал все методы, которые могу найти в Интернете, и потерпел неудачу. Затем я прочитал этот пост и почерпнул некоторые идеи из ответа @Alex. Затем я ищу ""credsStore": "osxkeychain"", который используется в моем config.json. Я перехожу по этой ссылке https://docs.docker.com/engine/reference/commandline/login/, чтобы выйти из системы, а затем снова войти в систему. Наконец, я могу успешно продвигать свое изображение.

Я использую собственный реестр докеров, где я сначала завершаю HTTPS/SSL на другом сервере (например, nginx или trafficserver), а затем передаю трафик в реестр по незашифрованному HTTP. После долгих исследований мне удалось заставить его работать.

i) проблема вызвана отсутствием заголовка X-Forwarded-Proto в запросах PATCH, что приводит к ошибке 401. См. https://github.com/distribution/distribution/issues/1177#issuecomment-155718420 .

ii) nginx версии 18 (и ниже, например, Ubuntu Bionic и Focal), похоже, не проходит

      proxy_set_header  X-Forwarded-Proto https;

для PATCH (POST работает нормально), но nginx версии 21 работает нормально.

Кроме того, Apache Trafficserver, кажется, правильно передает заголовки после включения.

Старый пост, но была такая же проблема, и я не смог найти ответ.
ПРИМЕЧАНИЕ. Тег Docker чувствителен к регистру имени сервера входа в Azure.

Я загружал в контейнер Azure. Контейнер был назван «LearnContainer81», а сервер входа — «learncontainer81.azurecr.io».

Когда я делал тег в Docker, я делал это с помощью «LearnContainer81.azurecr.io/X», и он выдавал неавторизованные файлы . Снова пометил строчными буквами в соответствии с Loginserver для Azure. Затем это загрузилось нормально.

У меня была та же проблема, но я исправил ее с помощью push с указанным URL:

      docker login -u https://index.docker.io/v1/

Просто интересно узнать, что может быть причиной этой проблемы?

Другие вопросы по тегам