我有一个 特权 docker 容器,它将使用 FUSE 挂载自定义文件系统。
它是通过从主机到容器绑定挂载 /dev
,/sys
并运行一些访问块设备的自定义软件来实现的,例如/dev/sdX
inside the container 在某个挂载点挂载自定义 FS,比方说 /mnt/some_mountpoint_inside_the_container
(一切仍然发生在容器内)。。 >
现在,我想访问这个挂载在docker容器内的挂载点从主机但是没有用。到目前为止,我已经尝试过:
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
后,才能在容器中找到主机上创建的文件。
...
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.io
的 docker-compose
/apt-get
一起使用。容器本身是 CentOS 8。