docker-compose down --rmi 所有容器共享镜像

blu*_*ers 11 docker docker-compose

我有一个 docker compose 文件,它使用存储在其中的 Dockerfile 构建一些服务,该 compose 看起来像这样

version: '3.5'

services:

  my_app:
    build: ""
    image: my_image
    ....
    ...

  my_two:
    image: my_image
    ...

  my_three:
    image: my_mage
    ...
Run Code Online (Sandbox Code Playgroud)

现在,当我运行时,docker-compose up会发生图像构建(build: ""找到 Dockerfile 并构建它并将其命名为“my_image”),然后其他两个(my_twomy_three)正在使用已经构建的图像。

到目前为止,一切都很好。

问题是,当我运行时,docker-compose down --rmi all它成功删除my_image,但随后重试两次以再次删除图像,因为它们与其他服务关联。

该操作执行其需要执行的操作,停止并删除所有容器并删除图像,但问题是它显示错误消息 - 我想避免这种情况,因为我正在围绕它包装一些软件。

如何才能docker-compose只删除一次图像?

Vin*_*ren 5

使用build而不是image来定义所有三个服务可能更容易。

当你运行时docker-compose up,它会首先构建第一个服务,即该位不变。所改变的是,它随后构建第二个和第三个服务,但它将能够重用初始构建中的缓存层,因此您实际上最终会得到一个带有三个不同标签的图像

然后,当您要取下图像时,docker-compose down --rmi local可以安全地依次删除每个“图像”:第一次实际上只是取消标记,第二次也是如此,然后第三次将真正删除图像。