Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove usage of the VOLUME instruction #433

Open
polarathene opened this issue Feb 18, 2025 · 0 comments
Open

Remove usage of the VOLUME instruction #433

polarathene opened this issue Feb 18, 2025 · 0 comments

Comments

@polarathene
Copy link

polarathene commented Feb 18, 2025

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.

RUN mkdir /data && chown redis:redis /data
VOLUME /data
WORKDIR /data


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:


Additional context (docker-library specific)

This issue is being raised across docker-library repos (with the only change the Dockerfile referenced snippet to change). It is similar to the past (stale?) docker-library issues for mongo, postgres, mysql, redis.

It is unclear why those older related issues on this topic have remained open for 6-8 years instead of resolving them. If a maintainer could clarify any pragmatic reason to keep VOLUME as a blocker, that would be appreciated. So far the only reason I recall is with Docker Compose, but that seems like a weak argument when persistence actually matters it should be explicit.

If the length (plus varying discussion chains) and age of those issues contribute to the lack of resolution, the issue I raise here hopefully condenses justification for removal into a consistent an easier to digest manner to drive this change forward.

As these are images maintained officially under the docker-library umbrella, it would help endorse VOLUME as an anti-pattern instead of encourage it's usage.

@polarathene polarathene changed the title Remove usage of the VOLUME directive Remove usage of the VOLUME instruction Feb 18, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant