本地找不到Docker镜像

107
我正在关注这篇文章- 参考代码在GitHub上。我已经在本地克隆了该存储库。
该项目内部有一个React应用程序。 我正尝试按照同一篇文章上的第7步在本地运行它:
docker run -p 8080:80 shakyshane/cra-docker

这将返回:

Unable to find image 'shakyshane/cra-docker:latest' locally
docker: Error response from daemon: pull access denied for shakyshane/cra-docker, repository does not exist or may require 'docker login'.
See 'docker run --help'.

我尝试重新登录docker,但似乎由于它属于@shakyShane,我无法访问它。

我很傻地尝试了npm start,但它不是在node上运行的简单的react应用程序 - 它在容器中,而容器不受npm控制。

看起来docker pull shakyshane/cra-docker:latest会抛出这个错误:

Error response from daemon: pull access denied for shakyshane/cra-docker, repository does not exist or may require 'docker login'

那么问题来了,我如何在我的本地Mac机器上运行这个Docker镜像?


5
请使用命令"docker pull shakyshane/cra-docker:latest"拉取Docker镜像。 - rajashekar
@rajashekar 我现在就试一下。谢谢! - Zameer Ansari
2
在第六步中,您使用了哪个精确的构建命令? - Joachim Isaksson
4
第6步指示你运行命令docker build . -t shakyshane/cra-docker。这将使用名称为shakyshane/cra-docker的镜像构建,而你在第7步中正在尝试使用该镜像。由于找不到该镜像,似乎并没有构建该镜像,至少没有使用相同的名称构建。 - Joachim Isaksson
不幸的是,我发现自己处于这种情况:图像存在,但docker run命令来自一个shell脚本,在终端上从与命令本身相同的目录执行。因此,当手动运行命令时,它可以正常运行。但是,当从同一目录级别的shell脚本运行相同的命令时,它会失败...如果您读到这篇文章并遇到了相同的问题,也许可以提出一个新的问题。 - Bart McLeod
显示剩余2条评论
14个回答

65

嗯,这个问题并不合乎逻辑,但还是分享一下,以便像我这样的未来人不会被卡住。

问题在于我试图运行一个不存在的docker镜像,链接中有说明。

我需要构建该镜像:

docker build . -t xameeramir/cra-docker

然后运行它:

docker run -p 8080:80 xameeramir/cra-docker

40
在我的情况下,我的图像已经指定了标签,但我没有使用它。
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
testimage          testtag            189b7354c60a        13 hours ago        88.3MB

无法在本地找到图像'testimage:latest',使用此命令docker run testimage

所以像这样指定标签-docker run testimage:testtag对我有用。


嗨(docker 新手在此),请原谅我的无知。您是如何打印出您评论中的顶部行,包含仓库细节信息的? - Tomk07
2
这是“docker image list”。 - Seba99

32

分享我的解决方案,因为以上方法都没有起作用。

我在 MacBook M1 Pro 上工作。

我的问题是图像被构建为 arm/64。而我正在运行以下命令:

docker run --platform=linux/amd64 ...

所以我必须构建 amd/64 平台的镜像才能运行它。

以下是命令:

docker buildx build --platform=linux/amd64 ...

总之,从我的经验来看,您的Docker镜像平台和Docker运行平台需要保持一致。


1
这正是我的问题,如果图像架构不正确,则会出现“图像未找到”的错误。感谢您的回答! - Moshe Shaham
当我切换到M1时,我遇到了类似的问题... docker build --platform=amd64 -t foo . 然后 docker run --platform=amd64 foo 会抱怨找不到镜像。如果我在 docker run 命令中删除平台标志,则可以找到它,但会发出警告。相反,正确的修复方法是在运行命令上使用完整的平台 linux/amd64。我也将其添加到构建命令中以保持对称性。 - DaveMan
1
我刚刚尝试了!docker run --platform=linux/amd64 [CONTAINER_ID],但是不起作用(无法找到镜像),我做错了什么? - trumsuhu

9

在我的情况下,docker镜像已经存在于系统中,但我仍然无法在本地运行容器,因此我使用了确切的镜像ID而非名称和标签,就像这样:

docker run myContainer c29150c8588e

8

当我输入名字时,因为大小写或字符错误,导致出现了这个错误信息。例如,"name1\name2"而不是正确的" name1/name2"(使用了错误的斜杠)。


你是个好兄弟,它对我也起作用了 :))),问题在于 Linux 与 Windows 的路径不同,在这种情况下它是基于 Windows 的路径,它起作用了 ::))) - Esmatullah Hanif

3

因为我的macOS本地docker虚拟机磁盘空间不足,所以我遇到了这个问题。

我只需使用docker image prune删除一些旧镜像,就可以使它正常工作了。


2

在我的情况下,当我登录到我的Docker桌面时,我看到了这个错误。我要拉取的仓库是我企业内部的本地仓库。一旦我退出Docker Hub,拉取就可以正常工作。


1
最简单的答案可能是正确的!确保您有执行命令的权限,请使用以下命令: sudo docker run -p 8080:80 shakyshane/cra-docker

1
问题在于您正在尝试运行不存在的镜像。如果您正在执行Dockerfile,则在Dockerfile通过没有错误之前,该镜像不会被创建;因此,当Dockerfile尝试运行该镜像时,它找不到它。请确保您的脚本执行过程中没有错误。

嗨,我觉得这不是正确的答案。Docker镜像不是公共的,因此该用户无法下载该镜像。 - Sownak Roy

1

1
同意@RichardBarber,这是我的错误。无论如何,还是谢谢你的帮助 :) - Zameer Ansari

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