Докер не авторизован: требуется аутентификация - при успешном входе в систему
При отправке образа докера (после успешного входа в систему) с моего хоста я получаю "неавторизованный: требуется аутентификация".
Подробности ниже.
-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
Размещенное вами решение не работает для меня...
Это то, что работает для меня:
Создайте репозиторий с нужным именем.
При фиксации изображения назовите изображение как репозиторий, включая имя пользователя
<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 минут.
Вот решение для моего случая (частные репозитории, бесплатный тарифный план)
Имя сборки образа для отправки должно иметь такое же имя репозитория.
Пример: репозитории на док-хабе: accountName/resposName имя сборки образа "accountName/resposName" -> сборка докера -t accountName/resposName
затем введите docker push accountName/resposName: последний
Это все.
То, что работало для меня, было создать новый репозиторий и переименовать изображение с
$ 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
- Start
**Docker Quick Start terminal**
run (this terminal enables connection) Until you pushed images, that will keep token alive. - Login
docker login
Make sure you tag the image with username
docker build -f Dockerfile -t 'username'/imagename
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/
Просто интересно узнать, что может быть причиной этой проблемы?