'Docker - duplicate mount point
I use the Docker ClamAV image in my docker-compose.yml like this:
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
This service is planned to be the "updater"/"writer". This means it will download updates into /var/lib/clamav, and since this is a mounted volume with source: /home/misc/docker/efs_clamav - the reader nodes (that will not run the update command) will be able to get the updated files from that folder.
This is all in theory. In practice, when I run this image I get the following error:
ERROR: for clamav_writer Cannot create container for service clamav_writer: Duplicate mount point: /var/lib/clamav
I understand that this is due to the fact that the Dockerfile already set the same directory as a volume:
VOLUME /var/lib/clamav
Is there anyway I can still set that volume in my docker-compose.yml file (so that I can set the source directory for other readers to read from?
Solution 1:[1]
Solution 2:[2]
Just in case anyone is still having this issue, it looks like this is the bugfix, which will presumably be released in the version after Docker Desktop v3.4.0:
https://github.com/docker/compose-cli/pull/1782
And the workaround until that makes it into the production docker compose cli is to make sure to use the exact same path (either with or without trailing slash) in the Dockerfile and the docker-compose.yml
Solution 3:[3]
This issue seams to occur when you have multiple volume declarations mostly in docker-compose.yml and Dockerfile. The solution is to remove VOLUME declaration in your Dockerfile or docker-compose.yml eg.
version: '3.5'
services:
test:
build: .
volumes:
- /mnt/tmpfs
Docker file:
FROM alpine:3.4
VOLUME /mnt/tmpfs
CMD /bin/sh
I removed the one from the Dockerfile.
Solution 4:[4]
For me a combination of both the answers fixed the problem.
Even though I didn't have a duplicate but I had Docker compose in another project with same named volume and same mount path.
The solution was to change the mount path temporarily from
volumes:
- db-data:/var/lib/postgresql/data
to,
volumes:
- db-data:/var/lib/postgresql/data/somethingelse
And then I gave docker compose up and then docker compose down. This cleared the existing mount points.
Finally I reverted my changes to the yaml, Now even the old path works fine.
Solution 5:[5]
Upgrading docker-compose from version 1 (v1.29.2) to version 2 (v2.2.3) fixed it for me.
Note that the installation process is different - and so is the command to run: in version 1, it's docker-compose; in 2, it's docker compose (i.e. it's a subcommand of docker)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | George Stocker |
| Solution 2 | thorfi |
| Solution 3 | |
| Solution 4 | Code Name Jack |
| Solution 5 | farialima |
