Docker Compose: 没有这个镜像

134
当我运行命令docker-compose up时,出现了以下错误:
root@ubuntu:/home/benson/Docker/HaproxyMy# docker-compose up
Recreating 950ddc308278_950ddc308278_950ddc308278_950ddc308278_950ddc308278_haproxymy_webb_1
Recreating 485800bdf3a1_485800bdf3a1_485800bdf3a1_485800bdf3a1_485800bdf3a1_haproxymy_webc_1
Recreating 2b3338d88716_2b3338d88716_2b3338d88716_2b3338d88716_2b3338d88716_haproxymy_weba_1

ERROR: for webb  No such image: sha256:15853e771e7ca3f5eecee38fcf97efd3ee164c1b66e2ef543d9985a04e78e099

ERROR: for webc  No such image: sha256:15853e771e7ca3f5eecee38fcf97efd3ee164c1b66e2ef543d9985a04e78e099

ERROR: for weba  No such image: sha256:15853e771e7ca3f5eecee38fcf97efd3ee164c1b66e2ef543d9985a04e78e099

docker-compose.yml:

weba:
    build: ./web
    expose:
        - 80

webb:
    build: ./web
    expose:
        - 80

webc:
    build: ./web
    expose:
        - 80


haproxy:

    image: haproxy:latest

    volumes:

        - ./haproxy:/haproxy-override
        - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
    links:

        - weba
        - webb
        - webc
    ports:

        - "80:80"
        - "70:70"
    expose:

        - "80"
        - "70"
9个回答

267

这个问题是由于旧缓存引起的,第一次我运行这个命令失败了,docker-compose已经创建了镜像,但是我在 docker images 中看不到它们。

需要通过 docker-compose ps 进行检查,并使用命令 docker-compose rm 删除所有旧镜像,然后重新构建。


2
看看Shiva的答案。不知道为什么要花近一年时间才能改进这个问题?来吧,SO! - Adam
2
这将完美地为我完成魔法。 - JPG
1
可能需要提醒一下,docker-compose rm 命令不需要指定镜像的 ID 参数,这与使用 docker rmi #id 的情况不同。否则,我将无法删除已经停止并通过 docker rmi 2d0c8d6058f4_myprojectcom_app_1 命令擦除的 docker-compose 镜像名称。 - FantomX1

138
我在Windows上使用Docker Machine时遇到了这个错误。
一个容器似乎失控了; 运行docker-compose rm --all导致整个shell冻结,重新启动Docker Machine也没有帮助,当运行docker-compose ps时,容器仍然出现。
解决方案是执行docker-compose down

更好的方法是使用 docker-compose rm webb webc weba 仅删除失败的镜像,然后再拉取或构建新的。 - OzzyCzech
1
@OzzyCzech 我相信这对你的情况很有用。但在我的情况下,docker-compose rm 导致我的 shell 冻结了。 - Matthias Braun
我没有遇到冻结问题,但是 docker-compose rm --all 没有删除所有镜像。使用 docker-compose down 解决了这个问题。(Ubuntu 16) - Raheel
谢谢@MatthiasBraun。在我的Ubuntu 17.10上它有效了。 - Raj Kumar N

52

为了解决这个问题

docker-compose -f docker-compose-filename.yml down

docker-compose -f docker-compose-filename.yml up

查看所有图片

docker images -a

1
问题出在缺少图像,因此 updown 命令无法正常工作。正确的解决方法是使用 docker-compose rm 清除图像,然后再次执行 build -> up - Bhargav Nanekalva
2
Bhargav先生,在您对某项技术没有足够经验的情况下,特别是在对一个答案进行投票前,请先进行更多的研究。或者您至少可以查看之前的答案(由Matthias Braun提供),其中说到docker-compose down将解决这个问题。它已经为我和其他人(mac-10.11.5)(docker-17.03.1-ce)解决了这个问题。 - Yogesh Yadav
他确实提到了使用 rm 命令,并在他的回答下面的评论中也提到了。 - Bhargav Nanekalva
1
他说rm冻结了他的shell,对他来说并没有解决问题。 - Yogesh Yadav
2
这比 docker-compose rm 更好用。谢谢! - varagrawal
我也解决了。谢谢。 - Ahmed Nawaz Khan

23

通过以下方法解决了我的问题

docker-compose ps

查找有问题的容器名称,然后(注意这里正在运行docker

docker rm <problematic container name>

4
在 Ubuntu 18.04.4 和 Docker 版本 19.03.6 上,我尝试了 Yogesh Yadav 的解决方案,但在运行“current locks”时,docker-compose -f docker-compose-filename.yml up 命令会导致终端冻结。通过列出容器,我解决了这个问题。
$ docker-compose ps

逐个移除有问题的容器,然后运行:

$ docker rm <name_of_the_problematic_container>

0

这对我很有帮助!

docker-compose -f <replace with yml config file-name> down

0

我们的问题是 Swarm Worker 上的磁盘空间不足。通过在 Swarm Worker 节点上释放一些 /var/lib/docker 空间并重新部署来解决。


0

谢谢,我找到了根本原因。旧的缓存导致了这个问题。谢谢。我将在下面写出步骤。 - Bensson

0
在 Docker Desktop Mac 上,我遇到了各种来自 docker 和 docker-compose 的“找不到镜像”错误,无法执行 docker-compose down 或 docker system prune 或 docker ps 等任何操作。
我最终采取的做法是:
$ docker pull debian
$ docker tag debian $MISSING_IMAGE_NAME
$ docker system prune -a

这似乎让事情开始运转了。

(请注意,直到我运行了 prune 命令之前,我仍然收到“Error response from daemon: platform unknown not supported”的错误提示。老实说,我只是假设守护程序中留下的任何数据都是可疑的,并且需要被彻底清除。)


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