If you want your Docker container to use data from a network share, people tend to mount the share to a directory outside of Docker and then point the Docker volume to that mounted path. However, Docker-Compose also supports mounting volumes and brings some advantages. E.g. for a SMB/CIFS share, the relevant parts in your compose file could look like this:
services:
my-service:
...
volumes:
- my-smb-share:/data:rw
volumes:
my-smb-share:
driver_opts:
type: "smb3"
device: "//mynas/share"
o: "rw,vers=3.1.1,addr=192.168.1.20,username=mbirth,password=supersecret,cache=loose,iocharset=utf8,noperm,hard"
For type
you can use anything you have a mount.<type>
tool available, e.g. on my Raspberry this would be:
$ ls /usr/sbin/mount.*
/usr/sbin/mount.cifs* /usr/sbin/mount.fuse3* /usr/sbin/mount.nilfs2* /usr/sbin/mount.ntfs-3g@ /usr/sbin/mount.ubifs*
/usr/sbin/mount.fuse@ /usr/sbin/mount.lowntfs-3g@ /usr/sbin/mount.ntfs@ /usr/sbin/mount.smb3@
And the o
parameter is everything you would put as options to the mount command (e.g. in the 4th column in /etc/fstab
or after the -o
parameter). In the case of smb3, you can run mount.smb3 --help
to see a list of available options.
Doing it this way, Docker will make sure the share is mounted before running the container (and give an error if it can’t mount it). Also, if you copy the compose file to a different host, it’ll just work if the share is reachable from that new location, too.