通过卷的Docker持久存储

问题描述 投票:0回答:1

[所有阅读的内容都是说我们可以通过VOLUME控件,例如herehere创建docker持久性存储。

但是,我的Dockerfile中有以下内容:

VOLUME      ["/home", "/root"]

但没有任何内容保留在其中(我尝试了touch abc,当我退出并再次返回时,文件不在此处)。

[我看到official usage没有其他特殊控件或处理方法,但是即使apt-cacher-ng服务容器已停止,它也可以提供持久存储。

这怎么可能?我已经检查了以下内容,但仍然没有任何线索:

我如何使它起作用?

请以简单的Dockerfile(而不是docker-compose.yml解释)。

docker storage persistence docker-volume
1个回答
0
投票

问题是,使用docker run时,VOLUME指令创建了一个外部存储,而该文件夹没有“ mount”选项。换句话说,每当您为该映像创建一个容器时,docker都会创建一个带有随机标签的新卷,但是由于您没有为这些卷命名,因此新容器无法重用现有的已生成卷。

例如

FROM ubuntu
RUN mkdir /myvol
RUN echo "hello world" > /myvol/greeting
VOLUME /myvol

给出此Dockerfile,如果您仅使用以下命令构建并运行此Docker映像:

docker volume ls

docker build -t my_volume_test:latest .
docker run --name another_test my_volume_test:latest

docker volume ls

您将看到计算机上存在的卷数量增加了。该容器现在正在使用卷来存储数据,但是该特定卷没有名称或标签,因此仅绑定到该特定容器。如果删除并重新创建该容器,除非您设法挂载先前创建的卷,否则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 referenceUse volumes了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.