未授权的 docker: 成功登录后推送所需的身份验证

在从我的主机推送 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

这个/var/log/message 显示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。不走运!

305408 次浏览

好吧! 没关系; 我找到了解决方案。与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. 使用所需的名称创建存储库。

  2. 提交映像时,将映像命名为存储库,包括用户名 <dockerusername>/desired-name

我遇到了类似的问题,出现了一个类似的无用错误消息,但结果是因为我试图推送一个映像,这个映像是针对一个 docker-machine 托管实例构建的。

当我登录到实例本身时,docker logindocker push一切正常。

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

Docker 允许你有6个私有的图像命名,即使你只支付5,但不推出第6个图像。信息的缺乏是令人困惑和恼火的。

我有同样的问题,但我修复了推与指定的网址。 作为: docker login-u < a href = “ https://index.docker.io/v1/”rel = “ norefrer”> 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。

步骤1: 登录到 docker hub

根据@KaraPirinc 的评论,用 Docker 17版登录:

docker login -u username --password-stdin

然后输入你的密码。

步骤2: 在 码头中心中创建一个存储库。

让我们说“ Mysqlserver: sql”。

docker push <user username>/mysqlserver:sql

确保您的 docker 存储库名称与您的本地 docker 回购名称相匹配。 例如,让我们说,如果你本地的回购名称“ kavashgar/nojsapp”

那么你应该也有一个回购名称“ kavashgar”在码头枢纽

对我来说,有效的方法是创建一个新的存储库,并使用

$ docker tag image_id myname/server:latest

这里的解决方案为我的情况(私人回购,免费帐户计划)

Https://success.docker.com/datacenter/solve/getting_%22unauthorized%3a_authentication_required%22_when_trying_to_push_image_to_dtr

要推送的图像构建名称必须与回购协议的名称相同。

例如: Docker hub 上的 repos 是: AccountName/resposName 图像构建名称“ AccountName/resposName”-> docker build-t AccountName/resposName

然后打字 Docker push AccountName/resposName: last

仅此而已。

确保您有更多的私有映像插槽。

在我的例子中,我把一个用户转换成一个组织,它失去了一个免费的私有图像,所以以前的推动工作,不再工作。

即使我登录并检查了所有的配置,它仍然不工作! ! !

事实证明,当我构建我的 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

在您的配置文件 ~/. docker/config.json add 中

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

其中 XXXXX 是你们 https://hub.docker.com用户名: 密码(包括:)的基64编码

在我的情况下,我有同样的错误与拉。问题(在窗口下)是由双重停靠运行进程引起的,所以一个杀死他们所有并重新启动一个服务和它的工作。

虽然标准的过程是登录,然后推到 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

失败

已经有很好的答案,但我想提到一个-您不需要在推送之前提前创建存储库。

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

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

新手面临的问题是,我们倾向于把 docker hub 存储库看作一个 maven 存储库,并认为它可能包含许多不同的文件、文件夹和其他内容。

另一方面,docker 存储库只是一个映像,它不包含任何其他内容。它可以保存同一个图像的不同版本,但它只包含一个图像。< br/> < br/> 因此,在 docker hub 上将您的存储库命名为与您想要推入其中的映像相同的名称,并使用 dockerhub 用户名作为前缀。例如,如果您的用户名是 我的用户名,您的映像名是 码头鲸,请确保将 dockerhub 存储库命名为 码头鲸,并使用以下命令来标记和推送您的映像到存储库:

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'

同样的问题,在推送图像时:

unauthorized: authentication required

我所做的:

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

上面写着:

--电子邮件是不推荐的(但登录仍然成功)

解决方案: 使用最新的登录语法。

docker login

它会以交互的方式请求 < em > 用户名 密码,然后图像推送就正常工作了。

即使在使用了新语法之后,我的 ~/.docker/config.json在登录之后看起来也是这样的:

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

所以凭证在 MacOS 的钥匙链里。

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

通过在 root 中安装 awscli,在 root 中使用 awsconfigure 配置配置 aws,并在 root 用户上运行 sudo docker push 到 ecr 来修复这个问题

我的问题是5分钟后授权令牌无效。 由于图像尺寸的原因,推送时间超过了5分钟。

我已经通过将“授权令牌持续时间”增加到10分钟来修复它。

enter image description here

如果您使用 heroku,请确保您没有忘记“ heroku 容器: 登录”之前推。

首先尝试 docker logout,然后使用 docker login重新登录

如果你运行 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

注意 : 图像名称全部小写

您可以在某个地方 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

我也有过类似的问题。

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 中,这恰好是 seahorsePasswords and Keys工具。 我检查了那里,清理了所有的码头中心登录。 在此之后,一个新的 Docker 登录工作正常。

我尝试了所有我能在网上找到的方法,但都失败了。然后我读了这篇文章,从“ Alex 的回答”中得到了一些想法。然后我搜索“ credsStore”: “ osxkeychain”,它在 config.json 中使用。我按照这个链接 https://docs.docker.com/engine/reference/commandline/login/注销,然后再次登录。最后,我可以成功地推广我的形象。

我也有同样的问题,我能解决。 修改 ~/.docker/config.json文件,如下所示

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

别忘了重启码头服务。

service docker restart

好好享受

如果对任何人有帮助,我设法在提示符下面的命令解决了这个问题:

az acr login -n MyContainerName

在此之后,我可以成功地运行 docker push

我在 Heroku 和 Docker 身上也遇到了同样的问题,解决办法是

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

我也有同样的问题,但我用一个指定的 URL 推送修复了它:

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

只是想知道这个问题的原因是什么?

旧邮件,但有同样的问题,无法找到答案。
注意: Docker 标记对 Azure 登录服务器名称区分大小写。

我正在上传到 Azure 容器,容器名为“ LearnContainer81” 登录服务器是“ learncontainer81.azurecr.io”

当我在 Docker 中使用标签时,我使用了“ learncontainer81.azurecr.io/x" ,它给出了 未经授权。根据 Azure 的 Loginserver,再次以小写形式标记。这然后上传罚款。

这就是代理服务器的问题。

如果您正在使用任何虚拟专用网,请关闭该虚拟专用网。

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

我正在使用自托管的 docker 注册中心,首先在另一台服务器(比如 nginx 或者 Traffic 服务器)上终止 HTTPS/SSL,然后通过未加密的 HTTP 将流量传递给注册中心。经过大量研究,我终于成功了。

I)该问题是由于在 PATCH 请求中没有设置 X-Forward-Proto-header 引起的,导致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可以正常工作。

此外,一旦启用,ApacheTrafficserver 似乎可以正确地传递消息头。