绑定包含挂载在 docker 容器内的挂载点的卷

时间:2021-06-08 14:28:20

标签: linux docker docker-compose docker-volume docker-container

我有一个 特权 docker 容器,它将使用 FUSE 挂载自定义文件系统。

它是通过从主机到容器绑定挂载 /dev,/sys 并运行一些访问块设备的自定义软件来实现的,例如/dev/sdX inside the container 在某个挂载点挂载自定义 FS,比方说 /mnt/some_mountpoint_inside_the_container(一切仍然发生在容器内)。。 >

现在,我想访问这个挂载在docker容器内的挂载点从主机但是没有用。到目前为止,我已经尝试过:

  1. 在我的 docker-compose.yaml 中,我定义了一个从主机到容器的(绑定)卷,例如:
...
    volumes:
    - /mnt/mountpoint_at_host:/mnt/some_mountpoint_inside_the_container
...

然后,我在 /mnt/some_mountpoint_inside_the_container 的容器内 FUSE 安装了自定义 FS。似乎即使我在主机上的 /mnt/mountpoint_at_host 中添加了文件,更改也不会反映在容器内(即容器内的 ls -al /mnt/some_mountpoint_inside_the_container 不返回任何内容)。只有在我在容器中卸载 /mnt/some_mountpoint_inside_the_container 后,才能在容器中找到主机上创建的文件。

  1. 我也尝试绑定挂载一个父文件夹:
...
    volumes:
    - /mnt/mountpoint_at_host:/mnt/parent_folder
...

然后我在我的主机上创建了一个文件夹:mkdir -p /mnt/mountpoint_at_host/the_real_mntpt

我又一次,FUSE 在 docker 容器中安装了自定义 FS: /mnt/parent_folder/the_real_mntpt

但是,主机上的更改仍然不会反映在容器端或下划线块设备上。

有什么办法可以从主机访问安装在容器内的安装点?我想到了FUSE挂载FS后在容器内创建NFS服务,然后将NFS端口暴露给宿主机的方法。不过好像有点低效。

编辑:我将 Ubuntu 与来自 docker.iodocker-compose/apt-get 一起使用。容器本身是 CentOS 8。

0 个答案:

没有答案