Docker-重复的安装点

时间:2019-07-01 08:10:28

标签: docker docker-compose

我在docker-compose.yml中使用Docker ClamAV image是这样的:

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

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

理论上都是如此。实际上,当我运行此图像时,出现以下错误:

  

错误:对于clamav_writer无法创建服务容器   clamav_writer:重复的安装点:/ var / lib / clamav

我知道这是由于Dockerfile已经设置了与volume相同的目录而引起的:

VOLUME /var/lib/clamav

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

4 个答案:

答案 0 :(得分:28)

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

<块引用>

docker-compose down;然后docker compose up

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

version: '3.5'
services:
    test:
        build: .
        tmpfs: /mnt/tmpfs

Docker文件:

FROM alpine:3.4

VOLUME /mnt/tmpfs

CMD /bin/sh

我从Dockerfile中删除了一个。

答案 3 :(得分:0)

对我来说,两个答案的结合解决了这个问题。

即使我没有副本,但我在另一个具有相同命名卷和相同挂载路径的项目中使用了 Docker 组合。

解决办法是暂时改变挂载路径

volumes:
      - db-data:/var/lib/postgresql/data 

到,

volumes:
      - db-data:/var/lib/postgresql/data/somethingelse 

然后我给了 docker compose updocker compose down。这清除了现有的挂载点。

最后我恢复了对 yaml 的更改,现在即使是旧路径也能正常工作。