拉取访问被拒绝,仓库不存在或可能需要进行Docker登录。

243

我正在使用带有Docker的Laravel 4.2。我在本地设置它,没有任何问题,但当我尝试使用相同的过程在线上设置时,我遇到了错误:

pull access denied for <projectname>/php, repository does not exist or may require 'docker login'

创建存储库是否与此相关 https://cloud.docker.com/ 或需要在命令中登录 Docker?

经过几天的学习,我仍然无法弄清楚在这种情况下可能是什么修复方法以及正确的步骤是什么?

我有完整的代码。如果需要检查某些部分,我可以在此粘贴。


有时候问题仅仅是因为你没有构建所需的镜像。当你有 Dockerfile 和 docker-compose.yml 文件,并且在其中声明了一个依赖于另一个镜像(但本地尚未构建)的镜像时,你需要先使用 docker build 构建所需的镜像。 - Ebenezer Nikabou
36个回答

185
请注意,Docker中的错误信息是误导性的。
$ docker build deploy/.
Sending build context to Docker daemon  5.632kB
Step 1/16 : FROM rhel7:latest
pull access denied for rhel7, repository does not exist or may require 'docker login'

它说 可能需要进行“docker登录”。 我为此苦苦挣扎,意识到该镜像不再存在于https://hub.docker.com


5
或者您使用的是电子邮件地址而不是 Docker ID 进行登录。https://dev59.com/olsV5IYBdhLWcg3w6iV8#35644630 - Daniel Nelson
2
感谢您指出这一点。在我的情况下,该错误信息确实非常误导人,因为图像根本不存在。但是我配置了一个远程存储库,当时不可用。因此,当docker在我的本地repo中找不到图像时,它尝试使用远程repo并失败了。如果docker在错误中显示存储库的名称,那将是很好的,这样您就知道底层发生了什么。 - Anne van Leyden
2
谢谢,这是一个非常误导人的错误。在我的情况下,它是由于语法错误引起的。我没有意识到我输入了 docker create service,而正确的用法是 docker service create - rugby2312
2
错误信息有误导性。图片缺失很简单。你可能需要加载图片,或者像我一样需要运行另一个 Dockerfile 来创建下一个 Dockerfile 所需的镜像。 - gaoithe
1
就像 @gaoithe 一样,我也不得不运行一个 sh 脚本来从 Dockerfile 构建镜像。我不知道这一点,然后运行了另一个起始的 sh 脚本,但是那个脚本已经需要先运行构建 sh 脚本。 - questionto42
显示剩余4条评论

62

请确保正确书写 Docker 名称!

在我的情况下,我多写了一个 'u':

FROM ubunutu:16.04

正确的 Docker 名称是:

FROM ubuntu:16.04

43
我认为他们应该只是纠正“ubuntu”拼写错误变为更好的“ubunutu”;-) - lmat - Reinstate Monica
是的,打印错误是最常见的情况。 - mrkiril
哈!在我的情况下是pyhon而不是python。 - user3846373
同样地,我没有使用我认为的docker-compose文件运行,所以也要检查一下。 - Adair
类似的错误。使用了PostgreSQL而不是postgres。 - viggy28
谢谢!之前使用的是alpine3.16而不是alpine:3.16。 - karthikeyan

27

当您使用错误的图像名称时,通常会收到此消息。请检查您的图像是否存在于Docker存储库中,并带有正确的标签。

它对我很有帮助。
docker run -d -p 80:80 --name ngnix ngnix:latest
Unable to find image 'ngnix:latest' locally
docker: Error response from daemon: pull access denied for ngnix, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.
$ docker run -d -p 80:80 --name nginx nginx:latest
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx

我也遇到了同样的问题,错误地使用了alpine3.17.4而不是alpine:3.17.4。我一直在寻找答案,直到我看到了你的回答。 - Domenico Spidy Tamburro

20

我遇到了同样的问题。在我的情况下,这是一个私有注册表。因此,我必须像这里所示的那样创建一个秘密。

然后,我们需要将图像拉取密钥添加到deployment.yaml文件中,如下所示。

pods/private-reg-pod.yaml  
apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: <your-private-image>
  imagePullSecrets:
  - name: regcred

14

2020年11月及以后

如果这个错误是新的,并且过去从Docker Hub中拉取代码的操作是成功的,请注意: 自2020年11月起,Docker Hub 已经开始限制访问频率。

你会经常看到如下信息:

警告:未提供身份验证,使用CircleCI凭据从Docker Hub中获取拉取。

这是来自于使用Docker Hub的CircleCI和其他类似工具的消息。 或者:

守护程序的错误响应:拒绝对cimg / mongo的拉取访问,存储库不存在或可能需要'docker登录':拒绝对资源的请求访问。

您需要指定用于获取映像的凭据:

对于CircleCI用户:

      - image: circleci/mongo:4.4.2

        # Needed to pull down Mongo images from Docker hub
        # Get from https://hub.docker.com/
        # Set up at https://app.circleci.com/pipelines/github/org/sapp
        auth:
          username: $DOCKERHUB_USERNAME
          password: $DOCKERHUB_PASSWORD

我已经在我的项目的CircleCI控制台上设置了用户名和密码作为环境变量,但它仍然告诉我 Error response from daemon: pull access denied for nyck33/myimage, repository does not exist or may require 'docker login': denied: requested access to the resource is denied - mLstudent33

9
我通过在Docker镜像前面插入语言来解决了这个问题。
FROM python:3.7-alpine

8

我遇到了同样的问题。

pull access denied for microsoft/mmsql-server-linux, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

原来 DockerHub 已经更改名称,建议您重新检查 Docker Hub。


对我来说运行得很好,你救了我的一天。谢谢! - Abhijit

8
在我的情况下,我在本地机器上使用了一个自定义的镜像和内置于Minikube中的docker。我错误地指定了拉取策略:-
imagePullPolicy: Always

但实际上应该是:

imagePullPolicy: IfNotPresent

由于我在minikube docker环境中显式构建自定义镜像后,该镜像仅在本地存在。


6

我收到了相同的错误信息,但原因完全不同。

由于对docker还比较新,所以我使用了以下命令:

docker run -it <crypticalId>

其中<crypticalId>是我新创建的容器的ID。

但是,run命令需要的是一个镜像的ID,而不是容器的ID。

要启动一个容器,docker需要执行以下命令:

docker start -i <crypticalId>


6
在使用docker-composer时,我遇到了同样的问题。在我的情况下,这是一个Amazon AWS ECR私有注册表。看起来这是docker-compose的一个bug。
在docker compose yaml中添加完整路径"myrepo/myimage"后,

image: xxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/myrepo:myimage

一切正常了。
参考链接:https://github.com/docker/compose/issues/1622#issuecomment-162988389

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接