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

时间:2017-12-16 18:57:26

标签: docker filesystems docker-compose fuse moby

我正在尝试使用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:

问题在于,虽然我可以在/srv/media上读/写samba,但却无法通过/mnt/pool上的mergerfs

(我可以通过在docker-compose logs mergerfs执行docker-compose exec samba sh -c "echo 'foobar' > /srv/media/test.txt"时看到这一点,而exec mergerfs在日志中没有显示任何内容,而 的等效media。)

如何使此命名卷mergerfs仅仅成为A, B, C服务提供的实际文件系统的“代理”?

1 个答案:

答案 0 :(得分:1)

答案在于bind propagation

特别是,这里mergerfs需要media而不是type:bind,因此可以将其设置为(递归)(type:volume){{绑定传播 - 这意味着容器配置的挂载将传播回主机。

也就是说,r变为shared