Docker - 重复的挂载点

Cau*_*hon 17 docker docker-compose

我像这样使用Docker ClamAV 图像docker-compose.yml

version: '3.7'
services:
  clamav_updater:
    image: quay.io/ukhomeofficedigital/clamav:latest
    ports:
      - "3310:3310"
    volumes:
      - type: bind
        source: /home/misc/docker/efs_clamav
        target: /var/lib/clamav
Run Code Online (Sandbox Code Playgroud)

此服务计划成为“更新程序”/“编写程序”。这意味着它会将更新下载到 中/var/lib/clamav,并且由于这是一个已安装的卷,source: /home/misc/docker/efs_clamav因此读取器节点(不会运行更新命令)将能够从该文件夹中获取更新的文件。

这都是理论上的。实际上,当我运行这个图像时,我收到以下错误:

错误:对于 clamav_writer 无法为服务 clamav_writer 创建容器:重复挂载点:/var/lib/clamav

我知道这是因为Dockerfile已经设置了与 a 相同的目录volume

VOLUME /var/lib/clamav
Run Code Online (Sandbox Code Playgroud)

无论如何我仍然可以在我的docker-compose.yml文件中设置该卷(以便我可以设置source其他读者读取的目录?

Ste*_*ott 34

来自@hs-dev2 的评论看起来是正确的答案:

docker-compose down; 然后docker compose up


tho*_*rfi 6

以防万一有人仍然遇到这个问题,看起来这是一个错误修复,它可能会在 Docker Desktop v3.4.0 之后的版本中发布:

https://github.com/docker/compose-cli/pull/1782

在进入生产 docker compose cli 之前,解决方法是确保在 Dockerfile 和 docker-compose.yml 中使用完全相同的路径(带或不带尾部斜杠)


MUN*_*OGE 5

当您在 docker-compose.yml 和 Dockerfile 中有多个卷声明时,就会出现此问题。解决方案是删除 Dockerfile 或 docker-compose.yml 中的 VOLUME 声明,例如。

version: '3.5'
services:
    test:
        build: .
        volumes: 
        - /mnt/tmpfs
Run Code Online (Sandbox Code Playgroud)

Docker 文件:

FROM alpine:3.4

VOLUME /mnt/tmpfs

CMD /bin/sh
Run Code Online (Sandbox Code Playgroud)

我从 Dockerfile 中删除了该文件。