在组合容器之间共享卷,其中一个提供其文件系统?

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需要mediatype:bind而不是type:volume,这样就可以设置为有(递归)(rshared 绑定传播 - 这意味着容器配置的挂载将传播回主机。

media:/mnt/pool变为/mnt/media:/mnt/pool:rshared