在组合容器之间共享卷,其中一个提供其文件系统?
Share volume between compose containers, with one of them providing its filesystem?
我正在尝试使用 mergerfs 和 samba 设置一些 dockerised NAS:
services:
mergerfs:
build: ./mergerfs # just debian and install latest release
cap_add:
- SYS_ADMIN
devices:
- /dev/fuse:/dev/fuse
volumes:
- media:/mnt/pool
- /mnt/data0:/mnt/data0
...
...
samba:
image: dperson/samba
command: -s'media;/srv/media;yes;no;yes' # guest allowed, not RO
volumes:
- media:/srv/media
depends_on:
- mergerfs
...
volumes:
media:
问题是,虽然我可以在 samba
上 read/write 到 /srv/media
,但无法在 mergerfs
上连接到 /mnt/pool
。
(我可以通过在执行 docker-compose exec samba sh -c "echo 'foobar' > /srv/media/test.txt"
时观察 docker-compose logs mergerfs
来看到这一点,这在日志中没有显示任何内容,而等效的 exec mergerfs
执行 .)
如何使这个命名卷 media
仅成为 mergerfs
服务提供的实际文件系统的 'proxy'?
答案就在bind propagation.
特别是这里的mergerfs需要media
是type:bind
而不是type:volume
,这样就可以设置为有(递归)(r
) shared
绑定传播 - 这意味着容器配置的挂载将传播回主机。
即media:/mnt/pool
变为/mnt/media:/mnt/pool:rshared
。
我正在尝试使用 mergerfs 和 samba 设置一些 dockerised NAS:
services:
mergerfs:
build: ./mergerfs # just debian and install latest release
cap_add:
- SYS_ADMIN
devices:
- /dev/fuse:/dev/fuse
volumes:
- media:/mnt/pool
- /mnt/data0:/mnt/data0
...
...
samba:
image: dperson/samba
command: -s'media;/srv/media;yes;no;yes' # guest allowed, not RO
volumes:
- media:/srv/media
depends_on:
- mergerfs
...
volumes:
media:
问题是,虽然我可以在 samba
上 read/write 到 /srv/media
,但无法在 mergerfs
上连接到 /mnt/pool
。
(我可以通过在执行 docker-compose exec samba sh -c "echo 'foobar' > /srv/media/test.txt"
时观察 docker-compose logs mergerfs
来看到这一点,这在日志中没有显示任何内容,而等效的 exec mergerfs
执行 .)
如何使这个命名卷 media
仅成为 mergerfs
服务提供的实际文件系统的 'proxy'?
答案就在bind propagation.
特别是这里的mergerfs需要media
是type:bind
而不是type:volume
,这样就可以设置为有(递归)(r
) shared
绑定传播 - 这意味着容器配置的挂载将传播回主机。
即media:/mnt/pool
变为/mnt/media:/mnt/pool:rshared
。