Проблема заключается в том, что инструкция VOLUME создает внешнее хранилище при использовании прогона docker без опции «mount» для указанной папки c. Другими словами, каждый раз, когда вы создаете контейнер для этого изображения, docker будет создавать новый том со случайной меткой, но поскольку вы не присваиваете этим томам имя, новые контейнеры не могут повторно использовать существующие сгенерированные тома.
напр.
FROM ubuntu
RUN mkdir /myvol
RUN echo "hello world" > /myvol/greeting
VOLUME /myvol
Учитывая этот Dockerfile, если вы просто создадите и запустите этот docker образ с помощью следующих команд:
echo "There are currently $(docker volume ls | wc -l) volumes"
docker build -t my_volume_test:latest .
docker run --name another_test my_volume_test:latest
echo "There are currently $(docker volume ls | wc -l) volumes"
вы увидите, что количество томов на вашем компьютере увеличилось. Этот контейнер теперь использует том для хранения данных, но этот указанный том c не имеет имени или метки, поэтому он привязан только к этому указанному c контейнеру. Если вы удалите и заново создадите этот контейнер, docker создаст новый том со случайным именем, если вам не удастся смонтировать ранее созданный том.
Если вы хотите упростить его, я предлагаю сначала создайте том и смонтируйте его потом. например,
docker rm -f another_test
docker volume create my-vol
docker run \
--name another_test \
--mount source=my-vol,target=/myvol \
my_volume_test:latest
# alternative
docker rm -f another_test
docker run \
--name another_test \
-v my-vol:/myvol \
my_volume_test:latest
В этом случае вы можете создавать и удалять столько контейнеров, сколько вам нужно, но все они будут использовать один и тот же том.
проверьте ссылку VOLUME и Используйте тома для получения дополнительной информации.