如何从已安装的卷中保留文件并使用该文件创建新容器?

How to keep file from mounted volume and create new container with that file?

我有一个 docker 容器映像,它需要我装载一个包含特定配置文件的卷,以便该容器正确启动(这个映像不是我可以控制的,并且是供应商提供)。如果未安装该卷,则容器将退出,因为找不到该文件。所以我需要在/host/folder/里放一个配置文件,然后:

docker run --name my_app -v /host/folder:/container/folder image_id

然后应用程序将在 /container/folder/ 中查找它需要启动的文件。

我想 create/commit 一个包含该文件的新图像 /container/folder/,但是当该文件夹作为卷从主机挂载时,docker cp 将无法帮助我执行此操作,据我所试。我认为,就docker而言,复制到那里的文件与挂载卷中的文件没有区别,并且会在容器停止时消失。

我想这样做的部分原因是因为该文件不会更改,并且应该默认存在。另一个原因是我想在 Kubernetes 中 运行 这个容器,并避免在那里使用持久卷来挂载这些目录。我已经研究过使用 configmap,但我不知道如何将它们用于此目的。

如果可以将文件存储到 ConfigMap 中,则可以将文件挂载到卷并在 Kubernetes 中使用它。

我不确定你必须使用的type of file

ConfigMap 会将此文件注入到 POD 的卷中,以便应用程序可以访问和使用它。

在这种情况下,不需要 PVC。

您还可以按照 this nice example 展示如何将文件装载到 pod 内的卷中。

此外,我不确定 docker 图片,但如果你可以使用那个 docker 图片,你可以将文件添加到路径中,例如:

FROM <docker image>
ADD file ./container/folder/

在这种情况下,您可能需要检查是否可以使用供应商 docker 图像作为 base 并将文件添加到其中。