根据这里的文档:https://docs.docker.com/storage/volumes/
如果您启动一个创建新卷的容器(如上所述),并且该容器在要挂载的目录(例如上面的 /app/)中具有文件或目录,则该目录的内容将被复制到该卷中。然后容器安装并使用该卷,并且使用该卷的其他容器也可以访问预先填充的内容。
换句话说,期望是,如果我在 /var/lib/mysql 中有这样的文件
root@d8fa9a8b305a:/var/lib/mysql# ls
auto.cnf xtz ib_logfile0 ibdata1 mysql sys
debian-5.7.flag ib_buffer_pool ib_logfile1 ibtmp1 performance_schema
然后,当我将卷安装到/var/lib/mysql
那么容器中的所有文件都应该复制到我的卷中。
但我发现这并没有发生:
/var/lib/mysql/mysql # ls
auto.cnf ib_buffer_pool ib_logfile0 ib_logfile1 ibdata1
这是我挂载到 /var/lib/mysql 的卷的内容,正如您所看到的,该数据与 docker 映像本身的 /var/lib/mysql 中存在的数据不同。所以,结果,启动失败。
Note:有问题的卷实际上是由 kubernetes 挂载的。所以,我在这里做出一个主要假设
volumeMounts:
- name: xtz-persistent-storage
mountPath: "/var/lib/mysql/"
相当于这样做:docker run -p 443:443 --rm -v mysql:/var/lib/mysql <image>
库伯内斯Volumes
和 Docker 不一样Volumes
.
来自 Kubernetes文档:
Docker 也有卷的概念,尽管它有点松散且管理较少。在 Docker 中,卷只是磁盘上或另一个容器中的目录。生命周期不受管理,直到最近才出现本地磁盘支持的卷。 Docker 现在提供卷驱动程序,但目前功能非常有限(例如,从 Docker 1.7 开始,每个容器仅允许一个卷驱动程序,并且无法将参数传递给卷)。
另一方面,Kubernetes 卷具有明确的生命周期 - 与包含它的 Pod 相同。因此,卷的寿命比 Pod 中运行的任何容器都长,并且数据在容器重新启动时得以保留。当然,当 Pod 不复存在时,卷也将不复存在。也许比这更重要的是,Kubernetes 支持多种类型的卷,并且 Pod 可以同时使用任意数量的卷。
从本质上讲,卷只是一个目录,其中可能包含一些数据,Pod 中的容器可以访问该目录。该目录的形成方式、支持它的介质及其内容均由所使用的特定卷类型决定。
所以,虽然概念的名称相同,但这是不同的volume
.
在挂载时,Kubernetes 会覆盖一个目标目录。
不幸的是,目前还没有办法合并已安装卷和容器中的内容。这是其中之一讨论关于它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)