拉取访问被拒绝,仓库不存在或可能需要进行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个回答

5

我因为不小心从第一张图片中删除了AS标签而出现了这个问题:

例如:

FROM mcr.microsoft.com/windows/servercore:1607-KB4546850-amd64
...
.. etc ...
...
FROM mcr.microsoft.com/windows/servercore:1607-KB4546850-amd64
COPY --from=installer ["/dotnet", "/Program Files/dotnet"]
... etc ...

应该是:

FROM mcr.microsoft.com/windows/servercore:1607-KB4546850-amd64 AS installer
...
.. etc ...
...
FROM mcr.microsoft.com/windows/servercore:1607-KB4546850-amd64
COPY --from=installer ["/dotnet", "/Program Files/dotnet"]
... etc ...

谢谢你的回答,让我重新查看了我的Dockerfile,并意识到我犯了同样的错误,呵呵。 - undefined

4

如果您在 Docker 构建过程中有两个以上的阶段,请阅读此解决方案:

这个错误信息完全是误导性的。如果您有一个两阶段(上下文)的 Dockerfile 并且想要将一些数据从第一个阶段复制到第二个阶段,则必须标记第一个上下文(例如:build),并通过该标签访问它。

#stage(1)
from <image> as build 
.
.
#stage(2)
From <image>
copy --from=build /sourceDir  /distinationDir

太棒了!一点不差! - undefined

3

Docker 可能已经丢失了认证数据。因此,您需要重新与您的注册表提供商进行身份验证。例如,使用 AWS:

最初的回答:

aws ecr get-login --region us-west-2 --no-include-email

将生成的 "docker login ..." 复制并粘贴到经过身份验证的 Docker 上。
来源:Amazon ECR注册表

在我的情况下,注册表被放置在Google Cloud中,并且我已从gcloud帐户注销。我注意到在config.json中,credHelpers键和值,例如:“credHelpers”:{   “asia.gcr.io”:“gcloud” }这表明我可能需要登录我的gcloud帐户。希望能对某些人有所帮助。 - Syed Abdul Wahab
对我来说很有效!谢谢 - Alouani Younes

3
如果仓库是私有的,您必须分配下载权限。您有两个选择:使用docker登录命令或将生成的文件放置在~/.docker/docker.config中。请注意保留HTML标记。

3
本地运行良好,为何在线上出现错误? - Jass
1
我已经使用docker login登录了,但是我找不到~/.docker/docker.config文件。 - Jass
1
~/.docker/docker.config 只在 Linux 系统中有效,您是在运行 Docker for Mac 还是 Windows? - Facundo Diaz Cobos
2
我正在运行Ubuntu 16.0.4。 - Jass
4
你尝试过使用docker login --username user --password pass吗? 你尝试用拉取路径docker pull registry.hub.docker.com/organization/image:version吗? - Facundo Diaz Cobos
@Jass 抱歉有点晚了,但你能否展示一下如何在本地 kube 集群上运行它?你是使用 Minikube 还是 Docker Edge 的 kube 集群? - starklord

3

我先要运行docker pull命令,然后再次运行docker-compose up命令,这样就可以正常工作了。

docker pull index.docker.io/youruser/yourrepo:latest

谢谢!我一直在遵循 Dapr + docker-compose 文档,但它们没有提到先执行 docker pull 的事情。 - Geordie

3

这个错误信息可能会指示其他问题。

在我的情况下,我在另一个地方定义了一个 Docker 镜像,当前 Docker 继承其设置(docker-compos.yml):

FROM my_own_image:latest

我收到的错误信息:
qohelet$ docker-compose up
Building web
Step 1/22 : FROM my_own_image:latest
ERROR: Service 'web' failed to build: pull access denied for my_own_image, repository does not exist or may require 'docker login'

由于重新安装,之前的Docker被删除了,我无法使用以下命令构建我的Docker:docker-compose up
sudo docker build -t my_own_image:latest -f MyOwnImage.Dockerfile .

在您的特定情况下,您可能已经定义了自己的php-docker。

2
如果您从自己的注册表或Docker Hub以外的地方下载,可能需要在其网站上单独同意条款,就像Oracle的Docker注册表一样。它允许您进行Docker登录,但在您同意他们的条款之前,拉取容器仍然无法正常工作。

2

如果您正在使用多个Dockerfile,则不应忘记对所有文件运行构建命令。这就是我的情况。


2

如果您本地没有这个名称的镜像,Docker 将尝试从 Docker Hub 拉取它,但是在 Docker Hub 上找不到这个镜像。 或者,只需尝试 "docker login"。


2

请确认 image 在 Docker Hub 中存在。我曾试图使用命令 docker run mongodb 拉取 MongoDB,但是这是错误的。在 Docker Hub 中,镜像名称应该为 mongo


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