Docker 连接卷时数据源的优先级

Docker 连接卷时数据源的优先级,docker,kubernetes,containers,Docker,Kubernetes,Containers,在将持久性存储连接到pod时,我找不到有关数据源优先级的任何信息。 这可能是因为我的映像在一个目录中已经包含了一些数据,我将要将持久性存储装载到该目录中。在这种情况下会发生什么 在Docker中,它是以下内容: 绑定装载时,主机目录的内容优先 对于卷装载,容器内容优先(尽管我不确定如果卷和容器都包含数据会发生什么) 有关于库伯内特斯的文件吗?理想情况下,我希望有一个选项/标志来指定哪个数据源应该优先。也就是说,如果我希望图像数据优先,则在装载过程中,装载的卷数据将被清除,并且图像数据将放在那

在将持久性存储连接到pod时,我找不到有关数据源优先级的任何信息。 这可能是因为我的映像在一个目录中已经包含了一些数据,我将要将持久性存储装载到该目录中。在这种情况下会发生什么

在Docker中,它是以下内容:

  • 绑定装载时,主机目录的内容优先
  • 对于卷装载,容器内容优先(尽管我不确定如果卷和容器都包含数据会发生什么)
有关于库伯内特斯的文件吗?理想情况下,我希望有一个选项/标志来指定哪个数据源应该优先。也就是说,如果我希望图像数据优先,则在装载过程中,装载的卷数据将被清除,并且图像数据将放在那里。

装载的内容始终优先于图像中的内容。这与标准的Unixmount(8)命令的工作方式相同:之前发生在该装载点的任何内容都将被隐藏。这在普通Linux中是正确的,在Docker中用于各种卷装载,在Kubernetes中用于各种卷装载

Docker命名的卷具有类似于异常的内容。如果启动容器,并尝试在包含映像内容的目录上装载空命名卷,Docker会将映像内容复制到卷中。这仅在使用本机Docker(不是Kubernetes)时发生,仅在使用命名卷(不是绑定装载)时发生,并且仅在卷为空时发生。卷不是到基础映像的常规传递!这会导致诸如“Docker忽略我的节点
package.json
文件中的更改”或“我的Nginx代理正在为我的静态内容的旧版本提供服务”之类的问题,因为一旦命名卷中有内容,它将始终优先

如果需要将初始内容放入卷中,容器需要知道如何在启动时这样做。通常,您可以使用entrypoint脚本执行此操作,该脚本执行任何需要的初始设置,然后执行
exec“$@”
以运行主容器命令。如果您可以运行诸如数据库
initdb
之类的命令来创建可用的空骨架文件结构,或者您可以
cp-a
从未被卷装载隐藏的目录中获取内容。如果目标卷目录中已经有内容,则由entrypoint脚本决定如何协调该内容

#/垃圾箱/垃圾箱
#entrypoint.sh
#如有必要,将内容复制到`/data`目录中
如果[!-f/data/any-file.txt];然后
cp-a/app/data/data
fi
#启动主容器命令
执行官“$@”
#Dockerfile
入口点[“/app/ENTRYPOINT.sh”]#必须是JSON数组形式
CMD[“/app/my app”]#与之前一样
我建议使用Docker主机文件系统绑定挂载尝试此设置。这没有Docker copy on first use设置,因此如果Docker绑定挂载可以正常工作,那么它应该可以在所有环境中工作,包括Kubernetes。这还有一个优点,就是可以很容易地查看并仔细检查挂载目录中显示的正确内容。

挂载的内容始终优先于图像中的内容。这与标准的Unixmount(8)命令的工作方式相同:之前发生在该装载点的任何内容都将被隐藏。这在普通Linux中是正确的,在Docker中用于各种卷装载,在Kubernetes中用于各种卷装载

Docker命名的卷具有类似于异常的内容。如果启动容器,并尝试在包含映像内容的目录上装载空命名卷,Docker会将映像内容复制到卷中。这仅在使用本机Docker(不是Kubernetes)时发生,仅在使用命名卷(不是绑定装载)时发生,并且仅在卷为空时发生。卷不是到基础映像的常规传递!这会导致诸如“Docker忽略我的节点
package.json
文件中的更改”或“我的Nginx代理正在为我的静态内容的旧版本提供服务”之类的问题,因为一旦命名卷中有内容,它将始终优先

如果需要将初始内容放入卷中,容器需要知道如何在启动时这样做。通常,您可以使用entrypoint脚本执行此操作,该脚本执行任何需要的初始设置,然后执行
exec“$@”
以运行主容器命令。如果您可以运行诸如数据库
initdb
之类的命令来创建可用的空骨架文件结构,或者您可以
cp-a
从未被卷装载隐藏的目录中获取内容。如果目标卷目录中已经有内容,则由entrypoint脚本决定如何协调该内容

#/垃圾箱/垃圾箱
#entrypoint.sh
#如有必要,将内容复制到`/data`目录中
如果[!-f/data/any-file.txt];然后
cp-a/app/data/data
fi
#启动主容器命令
执行官“$@”
#Dockerfile
入口点[“/app/ENTRYPOINT.sh”]#必须是JSON数组形式
CMD[“/app/my app”]#与之前一样
我建议使用Docker主机文件系统绑定挂载尝试此设置。这没有Docker copy on first use设置,因此如果Docker绑定挂载可以正常工作,那么它应该可以在所有环境中工作,包括Kubernetes。这还有一个优点,就是可以很容易地仔细检查挂载目录中显示的正确内容