首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头通过卷持久化存储

码头通过卷持久化存储
EN

Stack Overflow用户
提问于 2020-03-31 04:02:12
回答 1查看 1.2K关注 0票数 1

所有读到的内容都说,我们可以通过VOLUME控件(例如,这里这里 )创建docker持久存储。

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

代码语言:javascript
复制
VOLUME      ["/home", "/root"]

但是里面没有保存任何东西(我尝试了touch abc,当我退出并再次返回时,文件就不在了)。

我看到官方使用没有其他特殊的控制或处理方法,但是它可以提供持久存储,甚至停止apt-cacher-ng服务容器。

那件事怎么可能?我已经检查了以下内容,但仍然没有头绪:

最后,正如解释的那样,这里

第一种机制将为请求基于主机的持久性的容器创建一个隐式存储沙箱。..。需要理解的关键是,沙箱中存储的数据除请求的容器外,其他容器不可用。

如何使持久存储工作?为什么每次删除我的更改,而apt-cacher-ng服务容器即使停止并重新启动也可以维护其持久存储?我在这里没有看到的“其他特殊控制或治疗”是什么?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-31 08:28:05

问题是,当没有针对特定文件夹的“挂载”选项而使用停靠程序运行时,卷指令会创建外部存储。换句话说,每次您为该映像创建容器时,对接者都会创建一个带有随机标签的新卷,但是由于您没有给这些卷命名,新容器不能重用现有生成的卷。

例如:

代码语言:javascript
复制
FROM ubuntu
RUN mkdir /myvol
RUN echo "hello world" > /myvol/greeting
VOLUME /myvol

给定这个Dockerfile,如果您只需使用以下命令构建和运行这个docker映像:

代码语言:javascript
复制
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"

您将看到机器上的卷的数量已经增加了。该容器现在使用卷来存储数据,但是该特定卷没有名称或标签,因此它只绑定到该特定容器。如果您删除并重新创建了该容器,那么除非您能够挂载先前创建的卷,否则停靠器将生成一个具有随机名称的新卷。

如果您想让它变得简单,我建议首先创建卷,然后挂载它。例如:

代码语言:javascript
复制
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

在这种情况下,您可以创建和删除任意数量的容器,但它们都将使用相同的卷。

有关更多信息,请查看体积基准使用量

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60943270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档