我在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
目录吗?
答案 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 up
和 docker compose down
。这清除了现有的挂载点。
最后我恢复了对 yaml
的更改,现在即使是旧路径也能正常工作。