This is part of the Semicolon&Sons Code Diary - consisting of lessons learned on the job. You're in the containerization category.
Last Updated: 2024-12-03
When I was building atop the WordPress docker base image, my changes (e.g.
composer install
) from a prior step in a Dockerfile kept disappearing at the
next step. This was because the base Wordpress image declared VOLUME
/var/www/html
(Aside: this folder is the apache document root)
This also happened to be the subfolder into which I wanted to make changes
(i.e. by calling composer install
in /var/www/html/wp-content/plugins/x
)
What was up? Here is a simple demonstration:
FROM alpine:3
VOLUME /myvol
RUN echo 'Hello World' >> /myvol/hello
RUN cat /myvol/hello
# cat: can't open '/myvol/hello': No such file or directory
Here's the key insight:
"If any build steps change the data within the volume after it has been declared, those changes will be discarded."
Option 1: Write the file first declare a volume afterwards
FROM ubuntu:16.04
RUN mkdir /myvol
RUN echo 'Hello World' >> /myvol/hello
VOLUME /myvol
Option 2: Write to a different folder, one that is not in the volume of the base image. Programmer S on Project P ended up doing this as a workaround for the WordPress container thing.