根据此处的文件: https://docs.docker.com/storage/volumes/
如果启动一个创建新卷的容器(如上所述),并且容器在要挂载的目录中有文件或目录(例如/ app / above),则将目录的内容复制到卷中。然后容器安装并使用卷,而使用该卷的其他容器也可以访问预先填充的内容。
换句话说,期望是,如果我在/ 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中的数据不同。因此,在启动时失败了。
注意:有问题的卷实际上是由kubernetes安装的。所以,我在这里做了一个重要的假设
volumeMounts:
- name: xtz-persistent-storage
mountPath: "/var/lib/mysql/"
相当于这样做:docker run -p 443:443 --rm -v mysql:/var/lib/mysql <image>
答案 0 :(得分:2)
Kubernetes Volumes
与Docker Volumes
不同。
来自Kubernetes documentation:
Docker也有卷的概念,虽然它有点宽松和管理较少。在Docker中,卷只是磁盘上或另一个容器中的目录。生命周期不受管理,直到最近才有本地磁盘支持的卷。 Docker现在提供了卷驱动程序,但是现在功能非常有限(例如,从Docker 1.7开始,每个容器只允许一个卷驱动程序,并且无法将参数传递给卷)。
另一方面,Kubernetes卷具有明确的生命周期 - 与包围它的pod相同。因此,卷可以比Pod中运行的任何容器更长,并且可以在Container重新启动之间保留数据。当然,当Pod不再存在时,音量也将不复存在。也许更重要的是,Kubernetes支持多种类型的卷,Pod可以同时使用任意数量的卷。
在核心,卷只是一个目录,可能包含一些数据,容器中的容器可以访问它。该目录是如何形成的,支持它的介质以及它的内容由所使用的特定卷类型决定。
所以,虽然概念的名称是相同的,但这是一个不同的volume
。
在装载上,Kubernetes覆盖目标目录。
不幸的是,目前还没有办法合并已安装的卷和容器中的内容。以下是关于它的discussions之一。