未经授权的docker:需要身份验证-在成功登录后进行推送


99

从主机推送docker映像(成功登录后)时,我得到“未授权:需要身份验证”。

详细信息如下。

-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,我不知道这个docker。见下文。

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进行了推送。没运气!


1
如果您单击答案旁的复选标记将其标记为“答案”,则对站点管理员以及其他寻求有关同一问题的信息将很有帮助:-)您被允许(甚至被鼓励)这样做在堆栈溢出。
辛迪·梅斯特

Answers:


87

编辑(13/08/2017)

根据@KaraPirinc的评论,在docker版本17中,为了登录(步骤1),

docker login -u username -p password

我也遇到了同样的问题,这就是我解决的方法。

步骤1:登录Docker Hub

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

步骤2:在docker hub中创建一个存储库。我们说“ mysqlserver:sql ”。

docker push <user username>/mysqlserver:sql

7
这应该是正确的答案docker login也可以在没有参数的情况下工作
-blnc

5
完美运作。但是,-- email已被弃用
IgorGanapolsky '16

(docker版本17):docker登录-u用户名-p密码
Yusuf Ismail Oktay,

感谢更新。我将根据您的评论更新答案。
GPrathap

34

您发布的解决方案不适用于我...

这对我有效:

  1. 用所需的名称创建存储库。

  2. 提交映像时,请像存储库一样命名映像,包括用户名<dockerusername>/desired-name。例如,radu/desired-name


#docker ps -a在此处获取conainer的名称--nostalgic_morse#docker commit -m“ test” -a“ alex” nostalgic_morse alexcpn / grpc#docker push alexcpn / grpc
Alex Punnen

28

好!没关系; 我找到了解决方案。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="

你救了我不少时间!对我来说也是完美的解决方案。
Marco Lenzo

7
也为我工作。这是命令行中的相同内容:sudo docker login -e me@example.com -u someuser -p somepass https://index.docker.io/v1/
Banjer '16

2
感谢@Banjer,尽管-e参数已被弃用,但对于大多数正确设置了系统的人来说,不必使用sudo。更好的解决方案是:docker login -u someuser https://index.docker.io/v1/这将要求输入密码,以防止其在命令历史记录中出现。
erb

17

如果您使用的是heroku,请确保在推送之前不要忘记“ heroku container:login”。


7

我遇到了类似的问题,并显示了类似的无用的错误消息,但结果却是因为我试图将自己构建的映像推向docker-machine管理的实例。

当我登录到该实例本身,没有docker logindocker push一切运行良好。


谢谢,docker登录名会自动创建配置文件,如链接中所述
Felix

7

我有同样的问题,但是我用指定的URL进行了修复。如:docker login -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

5

尽管标准过程是登录然后推送到docker注册表,但是克服此特定问题的技巧是通过在同一行中提供用户名和密码来登录。

因此:

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

失败


4

即使我登录并检查了所有配置,它仍然无法正常工作!

原来,当我构建docker时,我忘记将用户名放在存储库名称之前

docker build docker-meteor-build 

(构建成功)

然后当我推送到存储库时,

docker push myname/docker-meteor-build 

它将显示 unauthorized authentication required

因此,解决方案就是构建的名称,并且推送应该完全相同

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

4

新手面临的问题是,我们倾向于像对待Maven存储库一样对待Docker Hub存储库,并认为它可能包含许多不同的文件,文件夹和其他内容。

另一方面,泊坞库只是一个映像,不包含其他任何内容。它可以容纳同一图像的不同版本,但只包含一个图像。

因此,将您在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'

1
在看到这篇文章之前,我一直“拒绝:请求对资源的访问被拒绝”。最终,设法使我的第一个“ docker-push”在无需教程的情况下工作。谢谢一群!
glendon

2

如果您是第一次推送新的私有映像,请确保您的订阅支持该额外映像。

Docker允许您命名6个私有映像,即使您只为5个映像付费,也不能推送该第6个映像。缺乏翔实的信息令人困惑和恼怒。


2

这是我的案例的解决方案(私人回购协议,免费帐户计划)

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

要推送的映像构建名称必须与存储库名称相同。

示例:docker hub上的仓库是:accountName / resposName映像构建名称“ accountName / resposName”-> docker build -t accountName / resposName

然后输入docker push accountName / resposName:latest

就这样。


链接现在已断开。请修复它。
埃里克·伯林格

1

对我有用的是创建一个新的存储库并使用

$ docker tag image_id myname/server:latest


1

确保您有更多用于私人图像的插槽。

以我为例,我将一个用户转换为一个组织,但它失去了一个免费的私有映像,因此以前的推送有效,而不再有效。


1

我的问题是5分钟后无效的授权令牌。由于图像大小,该推送花费了超过5分钟的时间。

我已通过将“授权令牌持续时间”增加到10分钟来解决此问题。

在此处输入图片说明


您在哪里找到此设置?我找不到
Vic Seedoubleyew

2
为避免此问题,我的破解方法是docker login在上传完成前不久在另一个终端窗口中运行
Vic Seedoubleyew

@VicSeedoubleyew Admin Area -> Settings -> CI/CD -> Container Registry。网址路径:/admin/application_settings/ci_cd
Manuel Schmitzberger '19年

感谢你的回答。管理区是什么?我在dockerhub上没有看到任何内容
Vic Seedoubleyew

那是一个自己的gitlab实例。我不确定是否可以在dockerhub上进行配置。
Manuel Schmitzberger '19年

0

确保您的docker存储库名称与本地docker repo名称匹配。例如,假设您的本地存储库名称为“ kavashgar / nodjsapp”

那么你也应该在docker hub中有一个仓库名称“ kavashgar”


0

在您的配置文件〜/ .docker / config.json中添加

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

其中XXXXX是您的用户名的密码的 base64编码https ://hub.docker.com的密码(包括:)

在我的情况下,我也有同样的错误。该问题(在Windows下)由双重docker running进程引起,因此将其全部杀死并重新启动一项服务即可。


0

已经有了很好的答案,但是我想提到一个- 您无需在创建数据库之前就先创建它。

对我来说,问题是我没有为登录的帐户设置正确的用户名。但是,一旦YOURNAME/YOURIMAGE通过图像的标签在图像(例如)之前设置了正确的用户名,就可以在不预先创建新存储库的情况下推送它。

sudo docker tag IMAGE:VERSION USERNAME/IMAGE:VERSION
sudo docker push USERNAME/IMAGE:VERSION

0

在推送图像期间,这里同样存在问题:

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的钥匙串中。


0

我在ecr存储库上收到sudo docker push / sudo docker pull的类似错误,这是因为在我的用户(abc)中安装了aws cli,在root用户中安装了docker。

通过在root中安装aws cli修复了此问题,在root中使用aws configure配置了aws并在root用户上运行sudo docker push to ecr



0

您可以在某处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

0

如果你跑步 windows 7 docker Registry

  1. 开始 **Docker Quick Start terminal**运行(此终端启用连接),直到您推送图像为止,这将使令牌保持活动状态。
  2. 登录 docker login
  3. 确保使用用户名标记图像

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

  4. 推送图片

    docker image push username/imagename

注意:图片名称全部小写


0

我有一个类似的问题。

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中,这恰好是seahorseor Passwords and Keys工具。我在那里检查并清理所有docker hub登录信息。之后,新的docker登录按预期工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.