-
Notifications
You must be signed in to change notification settings - Fork 444
Open
Description
The VOLUME
instruction should be removed from the image build.
- Containers already persist state internally until the container is destroyed (for example, an image upgraded to a new tag).
- Proper persistence externally should be explicit.
mariadb-docker/Dockerfile.template
Line 137 in 91ba0cc
VOLUME /var/lib/mysql |
mariadb-docker/Dockerfile-ubi.template
Line 103 in 91ba0cc
VOLUME /var/lib/mysql |
Anonymous volumes are created when an image has a VOLUME
instruction. They will initialize by copying any of the existing content at the mount point (unlike a bind mount volume which typically replaces content at the mount point):
- With
docker run --rm ...
, each container instance started will create a new anonymous volume. Without the--rm
, these will accumulate pointlessly while the user may not be aware of this implicit waste on their system. - Docker Compose behaves differently, with additional logic to preserve the same anonymous volume across instances of the container for a given compose project.
The VOLUME
instruction provides no value to an image. It only causes problems.
For detailed justification, please see below context for my previous write-up on this subject:
- fix:
Dockerfile
-VOLUME
directive is an anti-pattern kanidm/kanidm#2948 Dockerfile
: RemoveVOLUME
instruction ory/hydra#3683- Remove
VOLUME
instructions caddyserver/caddy-docker#118 (comment) - Example of implicit 2GB disk usage per container instance (not applicable to images with empty
VOLUME
published, but clearly documents aVOLUME
concern)
Metadata
Metadata
Assignees
Labels
No labels