I’m new to Docker, but I’m trying to deploy some containers that will need to read and write to a network shared volume. I’m hoping to run things like Navidrome, Immich, and an Arr Stack. The containers are on Ubuntu and my network volume is on a qnap machine. It is discoverable from Ubuntu without issue.
Do I need to mount the shared volume in Ubuntu or can I just refer to it in the Docker Compose file?
I know I need to mention the location of the volume in the Docker Compose file, but I’m not sure how to write that. How do I include the un/pw information for the NAS?
I read about bind mounts in Docker’s documentation. Is that what I want to use? Again, how do I include the un/pw information? I’m not sure how to use the commands.
The volume path for the navidrome folder is //tiger-nas/music/music for example.
I appreciate any help.


You could mount the network share on the host/Ubuntu and then reference it in your docker compose file. It works. I prefer to write the mount in the Docker compose file since it’s a bit more portable. Something like this depending on if you’re using SMB/CIFS or NFS:
services: some_music_app: image: music_app_image:latest container_name: music_app volumes: - smb:/some/path/smb/music - nfs:/some/path/nfs/music volumes: smb: driver_opts: type: cifs o: "username=${user},password=${pass},uid=1000,gid=1000,vers=3.0" device: "//tiger-nas/music/music" nfs: driver: local driver_opts: type: nfs o: addr=tiger-nas,nolock,soft,rw,nfsvers=4 device: ":path/to/music/music"The ${user} and ${pass} in the smb volume definition are variables that you’ll need to have in a .env file next to your compose.yaml file. The .env file is just a normal text file with each line setting a value to a variable. Like:
user=my_username pass=123_abc_!@#Then you restrict the permissions of your .env file and you can essentially take a backup of both files and use them on any server with Docker.