Docker 覆盖文件夹与主机文件夹

Docker 覆盖文件夹与主机文件夹

我的情况如下:

我有一个正在编译的 docker 映像/容器。我必须通过 Dockerfile 将一些组件安装到 $HOME(因此在创建映像时)。假设这些组件之一位于~/.config,但也位于其他文件夹中。

我希望能够.config通过将主机中的主文件夹安装在 docker 内部的文件夹之上来覆盖其中的文件。每当您将文件放入已安装的文件夹中时,它都会覆盖容器中已有的文件。

所以从理论上讲,这正是 OverlayFS 所做的,对吧?虽然下层目录是 Docker 容器内的目录,但上层目录是我的主机上的目录。

有办法实现吗?

到目前为止,我发现了以下相关主题:

  1. https://serverfault.com/questions/841238/how-to-use-overlayfs-with-docker-volumes

    缺点:答案只展示了如何在主机上使用overlayfs,但是访问较低的容器/图像目录并不是不言自明的,而且感觉很脏。

  2. https://stackoverflow.com/questions/29550736/can-i-mount-docker-host-directory-as-copy-on-write-overlay

    缺点:由于禁用了 Overlay-on/over-overlay 选项,在 docker 内使用 mount -t Overlay 不适用于较新的内核

我也想过直接操作主机上的docker文件,即docker存储文件的目录,但这感觉有点脏。

为此,我会VOLUME /home/user在 Dockerfile 的末尾声明。然后我会在该目录中找到我的文件/var/lib/docker/volumes/user/_data。然后我可以在我的主机上创建一个overlayfs,使用该目录作为下层,我的其他文件夹作为上层。然后我可以使用 重新挂载该新目录docker run --volume。不幸的是,这将涉及访问该/var/lib目录的 su 权限。此外,还会在错误的图层上进行更改。

另一种方法是绑定挂载单个文件,但这可能也有点黑客行为。

相关内容