Docker Compose下线并删除所有镜像,同时共享具有容器的镜像。

10

我有一个docker-compose文件,它使用与其一起存储的Dockerfile构建了一些服务,该compose大致如下所示:

version: '3.5'

services:

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

  my_two:
    image: my_image
    ...

  my_three:
    image: my_mage
    ...

现在,当我运行docker-compose up时,发生的情况是构建镜像(build: ""查找Dockerfile并以“my_image”的名称构建它),然后其他两个服务 (my_twomy_three)使用已经构建好的镜像。

到目前为止还不错。
问题是当我运行docker-compose down --rmi all时,它成功地删除了my_image但是会尝试再次删除两次该镜像,因为它们与其他服务相关联。
操作执行了其需执行的任务,停止并删除所有容器并删除镜像,但问题在于它会显示错误消息 - 这是我想要避免的,因为我正在围绕它编写一些软件。
如何让docker-compose仅删除镜像一次?
1个回答

3

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

当您运行docker-compose up时,它将首先构建第一个服务,即此部分未更改。变化的是它随后构建第二个和第三个服务 - 但它将能够重用初始构建的缓存层,因此您实际上最终得到具有三个不同标签的一个镜像

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


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